Revision: 3166
http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=3166&view=rev
Author: elias_naur
Date: 2008-12-22 16:27:21 +0000 (Mon, 22 Dec 2008)
Log Message:
-----------
Made sprintfJavaString handle arbitrary length strings and reduce stack usage
Modified Paths:
--------------
trunk/LWJGL/src/native/common/common_tools.c
Modified: trunk/LWJGL/src/native/common/common_tools.c
===================================================================
--- trunk/LWJGL/src/native/common/common_tools.c 2008-12-22 11:55:28 UTC (rev 3165)
+++ trunk/LWJGL/src/native/common/common_tools.c 2008-12-22 16:27:21 UTC (rev 3166)
@@ -67,17 +67,36 @@
return debug;
}
-static jstring sprintfJavaString(JNIEnv *env, const char *format, va_list ap) {
-#define BUFFER_SIZE 400
- char buffer[BUFFER_SIZE];
- jstring str;
+static int do_vsnprintf(char* buffer, size_t buffer_size, const char *format, va_list ap) {
#ifdef _MSC_VER
- vsnprintf_s(buffer, BUFFER_SIZE, _TRUNCATE, format, ap);
+ return vsnprintf_s(buffer, buffer_size, _TRUNCATE, format, ap);
#else
- vsnprintf(buffer, BUFFER_SIZE, format, ap);
+ return vsnprintf(buffer, buffer_size, format, ap);
#endif
- buffer[BUFFER_SIZE - 1] = '\0';
+}
+
+static jstring sprintfJavaString(JNIEnv *env, const char *format, va_list ap) {
+ int buffer_size = 2;
+ char *buffer;
+ jstring str;
+ int str_size;
+ va_list cp_ap;
+ buffer = (char *)malloc(sizeof(char)*buffer_size);
+ if (buffer == NULL)
+ return NULL;
+ va_copy(cp_ap, ap);
+ str_size = do_vsnprintf(buffer, buffer_size, format, ap);
+ if (str_size > buffer_size) {
+ free(buffer);
+ buffer_size = str_size + 1;
+ buffer = (char *)malloc(sizeof(char)*buffer_size);
+ if (buffer == NULL)
+ return NULL;
+ int blah = do_vsnprintf(buffer, buffer_size, format, cp_ap);
+ }
+ va_end(cp_ap);
str = (*env)->NewStringUTF(env, buffer);
+ free(buffer);
return str;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|