From 53fa6004fb36dd93181fba4f4e1ea952b9e628ca Mon Sep 17 00:00:00 2001
From: deuce <>
Date: Mon, 28 Sep 2015 20:51:52 +0000
Subject: [PATCH] Add vasprintf() implementation called from asprintf(), and
 DLL-export them.

---
 src/xpdev/xpprintf.c | 18 ++++++++++++++----
 src/xpdev/xpprintf.h |  2 ++
 2 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/src/xpdev/xpprintf.c b/src/xpdev/xpprintf.c
index dd0021440d..d38a6aad2c 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 8784f517d0..7033f66f22 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
-- 
GitLab