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;
signature.asc
Description: OpenPGP digital signature