Hi,
somehow conversion of a jstring into a char * was missing in the JNI code below
making the those functions unusuable.

ChangeLog:

2006-10-09  Robert Schuster  <[EMAIL PROTECTED]>

        * native/jni/java-net/gnu_java_net/VMPlainSocketImpl.c:
        (Java_gnu_java_net_VMPlainSocketImpl_joinGroup): Properly
        convert jstring into char *.
        (Java_gnu_java_net_VMPlainSocketImpl_joinGroup6): Dito.
        (Java_gnu_java_net_VMPlainSocketImpl_leaveGroup): Dito.
        (Java_gnu_java_net_VMPlainSocketImpl_leaveGroup6): Dito.
        (getif_address): Added const modifier to second argument.
        (getif_index): Dito.

cya
Robert
Index: native/jni/java-net/gnu_java_net_VMPlainSocketImpl.c
===================================================================
RCS file: /cvsroot/classpath/classpath/native/jni/java-net/gnu_java_net_VMPlainSocketImpl.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- native/jni/java-net/gnu_java_net_VMPlainSocketImpl.c	9 Oct 2006 11:08:17 -0000	1.10
+++ native/jni/java-net/gnu_java_net_VMPlainSocketImpl.c	9 Oct 2006 11:10:41 -0000	1.11
@@ -555,8 +555,8 @@
 #endif /* HAVE_SETSOCKOPT */
 }
 
-static uint32_t getif_address (JNIEnv *env, char *ifname);
-static int getif_index (JNIEnv *env, char *ifname);
+static uint32_t getif_address (JNIEnv *env, const char *ifname);
+static int getif_index (JNIEnv *env, const char *ifname);
 
 /*
  * Class:     gnu_java_net_VMPlainSocketImpl
@@ -572,10 +572,14 @@
 #ifdef HAVE_SETSOCKOPT
   struct ip_mreq maddr;
   jbyte *addr_elems;
+  const char *str_ifname;
 
   if (ifname != NULL)
     {
-      maddr.imr_interface.s_addr = getif_address (env, ifname);
+      str_ifname = JCL_jstring_to_cstring(env, ifname);
+      maddr.imr_interface.s_addr = getif_address (env, str_ifname);
+      JCL_free_cstring(env, ifname, str_ifname);
+
       if ((*env)->ExceptionCheck (env))
         return;
     }
@@ -593,6 +597,7 @@
   if (-1 == setsockopt (fd, IPPROTO_IP, IP_ADD_MEMBERSHIP,
                         &maddr, sizeof (struct ip_mreq)))
     JCL_ThrowException (env, SOCKET_EXCEPTION, strerror (errno));
+
 #else
   (void) fd;
   (void) addr;
@@ -617,10 +622,14 @@
 #ifdef HAVE_INET6
   struct ipv6_mreq maddr;
   jbyte *addr_elems;
+  const char *str_ifname;
 
   if (ifname == NULL)
     {
-      maddr.ipv6mr_interface = getif_index (env, ifname);
+      str_ifname = JCL_jstring_to_cstring(env, ifname);
+      maddr.ipv6mr_interface = getif_index (env, str_ifname);
+      JCL_free_cstring(env, ifname, str_ifname);
+
       if ((*env)->ExceptionCheck (env))
         return;
     }
@@ -666,10 +675,14 @@
 #ifdef HAVE_SETSOCKOPT
   struct ip_mreq maddr;
   jbyte *addr_elems;
+  const char *str_ifname;
 
   if (ifname != NULL)
     {
-      maddr.imr_interface.s_addr = getif_address (env, ifname);
+      str_ifname = JCL_jstring_to_cstring(env, ifname);
+      maddr.imr_interface.s_addr = getif_address (env, str_ifname);
+      JCL_free_cstring(env, ifname, str_ifname);
+
       if ((*env)->ExceptionCheck (env))
         return;
     }
@@ -711,10 +724,14 @@
 #ifdef HAVE_INET6
   struct ipv6_mreq maddr;
   jbyte *addr_elems;
+  const char *str_ifname;
 
   if (ifname == NULL)
     {
-      maddr.ipv6mr_interface = getif_index (env, ifname);
+      str_ifname = JCL_jstring_to_cstring(env, ifname);
+      maddr.ipv6mr_interface = getif_index (env, str_ifname);
+      JCL_free_cstring(env, ifname, str_ifname);
+
       if ((*env)->ExceptionCheck (env))
         return;
     }
@@ -747,7 +764,7 @@
 }
 
 static uint32_t
-getif_address (JNIEnv *env, char *ifname)
+getif_address (JNIEnv *env, const char *ifname)
 {
 #ifdef HAVE_GETIFADDRS
   struct ifaddrs *ifaddrs, *i;
@@ -789,7 +806,7 @@
 }
 
 static int
-getif_index (JNIEnv *env, char *ifname)
+getif_index (JNIEnv *env, const char *ifname)
 {
 #ifdef HAVE_GETIFADDRS
   struct ifaddrs *ifaddrs, *i;

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to