Windows: Handle missing va_copy macro in MSVC

This commit is contained in:
Elias Naur 2008-12-22 16:38:57 +00:00
parent f8d5028de3
commit 94bd43ce19
1 changed files with 6 additions and 5 deletions

View File

@ -71,7 +71,11 @@ static int do_vsnprintf(char* buffer, size_t buffer_size, const char *format, va
#ifdef _MSC_VER #ifdef _MSC_VER
return vsnprintf_s(buffer, buffer_size, _TRUNCATE, format, ap); return vsnprintf_s(buffer, buffer_size, _TRUNCATE, format, ap);
#else #else
return vsnprintf(buffer, buffer_size, format, ap); va_list cp_ap;
va_copy(cp_ap, ap);
int res = vsnprintf(buffer, buffer_size, format, cp_ap);
va_end(cp_ap);
return res;
#endif #endif
} }
@ -80,11 +84,9 @@ static jstring sprintfJavaString(JNIEnv *env, const char *format, va_list ap) {
char *buffer; char *buffer;
jstring str; jstring str;
int str_size; int str_size;
va_list cp_ap;
buffer = (char *)malloc(sizeof(char)*buffer_size); buffer = (char *)malloc(sizeof(char)*buffer_size);
if (buffer == NULL) if (buffer == NULL)
return NULL; return NULL;
va_copy(cp_ap, ap);
str_size = do_vsnprintf(buffer, buffer_size, format, ap); str_size = do_vsnprintf(buffer, buffer_size, format, ap);
if (str_size > buffer_size) { if (str_size > buffer_size) {
free(buffer); free(buffer);
@ -92,9 +94,8 @@ static jstring sprintfJavaString(JNIEnv *env, const char *format, va_list ap) {
buffer = (char *)malloc(sizeof(char)*buffer_size); buffer = (char *)malloc(sizeof(char)*buffer_size);
if (buffer == NULL) if (buffer == NULL)
return NULL; return NULL;
int blah = do_vsnprintf(buffer, buffer_size, format, cp_ap); do_vsnprintf(buffer, buffer_size, format, ap);
} }
va_end(cp_ap);
str = (*env)->NewStringUTF(env, buffer); str = (*env)->NewStringUTF(env, buffer);
free(buffer); free(buffer);
return str; return str;