diff --git a/src/xpdev/xpprintf.c b/src/xpdev/xpprintf.c
index dd0021440df343e77e35e9f6acb48dba7f845dc3..d38a6aad2c6c4472ca2d4bc3d8433480ee002d11 100644
--- a/src/xpdev/xpprintf.c
+++ b/src/xpdev/xpprintf.c
@@ -45,25 +45,35 @@
 #include "gen_defs.h"
 
 #if defined(_MSC_VER) || defined(__MSVCRT__)
-int asprintf(char **strptr, char *format, ...)
+int DLLCALL vasprintf(char **strptr, char *format, va_list va)
 {
-	va_list	va;
 	va_list	va2;
 	int		ret;
 
 	if (strptr == NULL)
 		return -1;
-	va_start(va, format);
 	va_copy(va2, va);
 	ret = _vscprintf(format, va);
 	*strptr = (char *)malloc(ret+1);
 	if (*strptr == NULL)
 		return -1;
 	ret = vsprintf(*strptr, format, va2);
-	va_end(va);
 	va_end(va2);
 	return ret;
 }
+
+int DLLCALL asprintf(char **strptr, char *format, ...)
+{
+	va_list	va;
+	int		ret;
+
+	if (strptr == NULL)
+		return -1;
+	va_start(va, format);
+	ret=vasprintf(strptr, format, va);
+	va_end(va);
+	return ret;
+}
 #endif
 
 /* Maximum length of a format specifier including the % */
diff --git a/src/xpdev/xpprintf.h b/src/xpdev/xpprintf.h
index 8784f517d06b1e55f2d59f9726d55ce78c01968e..7033f66f229a4b7dc059b6d11a620448e91a93e5 100644
--- a/src/xpdev/xpprintf.h
+++ b/src/xpdev/xpprintf.h
@@ -79,6 +79,8 @@ DLLEXPORT char* DLLCALL xp_asprintf_end(char *format, size_t *endlen);
 DLLEXPORT char* DLLCALL xp_asprintf(const char *format, ...);
 DLLEXPORT char* DLLCALL xp_vasprintf(const char *format, va_list va);
 DLLEXPORT int DLLCALL xp_printf_get_type(const char *format);
+DLLEXPORT int DLLCALL vasprintf(char **strptr, char *format, va_list va);
+DLLEXPORT int DLLCALL asprintf(char **strptr, char *format, ...);
 #if defined(__cplusplus)
 }
 #endif