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
