PatchSet 4895 
Date: 2004/07/06 16:26:31
Author: guilhem
Branch: HEAD
Tag: (none) 
Log:
JNI fixes. Win32 fixes for JNI.

        * configure.ac: Assign JNICALL and JNIEXPORT for Win32 platforms.

        * kaffe/kaffevm/jni/jni-base.c,
        kaffe/kaffe/main.c,
        libraries/clib/native/System.c: Isolate string in userProperties
        from the initializing strings. So they can be freed at any times.

Members: 
        ChangeLog:1.2461->1.2462 
        configure:1.344->1.345 
        configure.ac:1.43->1.44 
        kaffe/kaffe/main.c:1.58->1.59 
        kaffe/kaffevm/jni/jni-base.c:1.3->1.4 
        libraries/clib/native/System.c:1.48->1.49 

Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.2461 kaffe/ChangeLog:1.2462
--- kaffe/ChangeLog:1.2461      Tue Jul  6 15:57:12 2004
+++ kaffe/ChangeLog     Tue Jul  6 16:26:31 2004
@@ -1,3 +1,12 @@
+2004-07-06  Guilhem Lavaux <[EMAIL PROTECTED]>
+
+       * configure.ac: Assign JNICALL and JNIEXPORT for Win32 platforms.
+
+       * kaffe/kaffevm/jni/jni-base.c,
+       kaffe/kaffe/main.c,
+       libraries/clib/native/System.c: Isolate string in userProperties
+       from the initializing strings. So they can be freed at any times.
+
 2004-07-06  Dalibor Topic  <[EMAIL PROTECTED]>
 
         * kaffe/kaffevm/jit/machine.c,
Index: kaffe/configure
diff -u kaffe/configure:1.344 kaffe/configure:1.345
--- kaffe/configure:1.344       Mon Jul  5 16:39:47 2004
+++ kaffe/configure     Tue Jul  6 16:26:32 2004
@@ -54569,12 +54569,23 @@
 
 
 
+
+case $Khost_os in
+win32*)
+       jnicall_define="__stdcall"
+       jniexport_define="__declspec(dllexport)"
+       ;;
+*)
+       jnicall_define=""
+       jniexport_define=""
+       ;;
+
 cat >>confdefs.h <<_ACEOF
-#define JNICALL
+#define JNICALL $jnicall_define
 _ACEOF
 
 cat >>confdefs.h <<_ACEOF
-#define JNIEXPORT
+#define JNIEXPORT $jniexport_define
 _ACEOF
 
 
Index: kaffe/configure.ac
diff -u kaffe/configure.ac:1.43 kaffe/configure.ac:1.44
--- kaffe/configure.ac:1.43     Mon Jul  5 16:40:03 2004
+++ kaffe/configure.ac  Tue Jul  6 16:26:40 2004
@@ -1911,8 +1911,19 @@
 dnl Define JNI call.
 dnl -------------------------------------------------------------------------
 
-AC_DEFINE_UNQUOTED(JNICALL, [])
-AC_DEFINE_UNQUOTED(JNIEXPORT, [])
+
+case $Khost_os in
+win32*)
+       jnicall_define="__stdcall"
+       jniexport_define="__declspec(dllexport)"
+       ;;
+*)
+       jnicall_define=""
+       jniexport_define=""
+       ;;
+
+AC_DEFINE_UNQUOTED(JNICALL, [$jnicall_define])
+AC_DEFINE_UNQUOTED(JNIEXPORT, [$jniexport_define])
 
 dnl -------------------------------------------------------------------------
 
Index: kaffe/kaffe/kaffe/main.c
diff -u kaffe/kaffe/kaffe/main.c:1.58 kaffe/kaffe/kaffe/main.c:1.59
--- kaffe/kaffe/kaffe/main.c:1.58       Mon Jul  5 16:40:18 2004
+++ kaffe/kaffe/kaffe/main.c    Tue Jul  6 16:26:41 2004
@@ -674,19 +674,21 @@
 #endif
                else if (argv[i][1] ==  'D') {
                        /* Set a property */
+                       const char *propStr = strdup(&argv[i][2]);
+                       
                        prop = malloc(sizeof(userProperty));
                        assert(prop != 0);
                        prop->next = userProperties;
                        userProperties = prop;
-                       for (sz = 2; argv[i][sz] != 0; sz++) {
-                               if (argv[i][sz] == '=') {
-                                       argv[i][sz] = 0;
+                       for (sz = 0; propStr[sz] != 0; sz++) {
+                               if (propStr[sz] == '=') {
+                                       propStr[sz] = 0;
                                        sz++;
                                        break;
                                }
                        }
-                       prop->key = &argv[i][2];
-                       prop->value = &argv[i][sz];
+                       prop->key = propStr;
+                       prop->value = &propStr[sz];
                }
                else if (argv[i][1] == 'X') {
                        fprintf(stderr, 
Index: kaffe/kaffe/kaffevm/jni/jni-base.c
diff -u kaffe/kaffe/kaffevm/jni/jni-base.c:1.3 kaffe/kaffe/kaffevm/jni/jni-base.c:1.4
--- kaffe/kaffe/kaffevm/jni/jni-base.c:1.3      Tue Jul  6 13:17:23 2004
+++ kaffe/kaffe/kaffevm/jni/jni-base.c  Tue Jul  6 16:26:42 2004
@@ -92,19 +92,21 @@
        {
          userProperty *prop = (userProperty *)malloc(sizeof(userProperty)); 
          int sz;
+         char *internalOpt = strdup(opt);
+
          assert (prop != 0);
 
          prop->next = userProperties;
          userProperties = prop;
 
-         for (sz = 2; opt[sz] != 0; sz++)
+         for (sz = 2; internalOpt[sz] != 0; sz++)
            {
-             opt[sz] = 0;
+             internalOpt[sz] = 0;
              sz++;
              break;
            }
-         prop->key = &opt[2];
-         prop->value = &opt[sz];
+         prop->key = &internalOpt[2];
+         prop->value = &internalOpt[sz];
        }
     }
 
Index: kaffe/libraries/clib/native/System.c
diff -u kaffe/libraries/clib/native/System.c:1.48 
kaffe/libraries/clib/native/System.c:1.49
--- kaffe/libraries/clib/native/System.c:1.48   Tue May 25 08:33:43 2004
+++ kaffe/libraries/clib/native/System.c        Tue Jul  6 16:26:42 2004
@@ -368,6 +368,17 @@
                setProperty(p, prop->key, prop->value);
        }
 
+       prop = userProperties;
+       while (prop != 0) {
+               userProperty *nextProperty = prop->next;
+
+               free(prop->key);
+               free(prop->value);
+               free(prop);
+               prop = nextProperty;
+       }
+       userProperties = NULL;
+
        return (p);
 }
 

_______________________________________________
kaffe mailing list
[EMAIL PROTECTED]
http://kaffe.org/cgi-bin/mailman/listinfo/kaffe

Reply via email to