summaryrefslogtreecommitdiffstats
path: root/libjava/classpath/native/jni/java-net
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/classpath/native/jni/java-net')
-rw-r--r--libjava/classpath/native/jni/java-net/Makefile.in25
-rw-r--r--libjava/classpath/native/jni/java-net/java_net_VMNetworkInterface.c147
-rw-r--r--libjava/classpath/native/jni/java-net/local.c13
3 files changed, 171 insertions, 14 deletions
diff --git a/libjava/classpath/native/jni/java-net/Makefile.in b/libjava/classpath/native/jni/java-net/Makefile.in
index a4e6442282c..69390bc4a0a 100644
--- a/libjava/classpath/native/jni/java-net/Makefile.in
+++ b/libjava/classpath/native/jni/java-net/Makefile.in
@@ -51,6 +51,9 @@ am__aclocal_m4_deps = $(top_srcdir)/../../config/depstand.m4 \
$(top_srcdir)/../../ltsugar.m4 \
$(top_srcdir)/../../ltversion.m4 \
$(top_srcdir)/../../lt~obsolete.m4 \
+ $(top_srcdir)/m4/ac_prog_antlr.m4 \
+ $(top_srcdir)/m4/ac_prog_java.m4 \
+ $(top_srcdir)/m4/ac_prog_java_works.m4 \
$(top_srcdir)/m4/ac_prog_javac.m4 \
$(top_srcdir)/m4/ac_prog_javac_works.m4 \
$(top_srcdir)/m4/acattribute.m4 $(top_srcdir)/m4/accross.m4 \
@@ -111,6 +114,8 @@ ACLOCAL = @ACLOCAL@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
+ANTLR = @ANTLR@
+ANTLR_JAR = @ANTLR_JAR@
AR = @AR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
@@ -142,6 +147,12 @@ CREATE_DSSI_LIBRARIES_FALSE = @CREATE_DSSI_LIBRARIES_FALSE@
CREATE_DSSI_LIBRARIES_TRUE = @CREATE_DSSI_LIBRARIES_TRUE@
CREATE_GCONF_PEER_LIBRARIES_FALSE = @CREATE_GCONF_PEER_LIBRARIES_FALSE@
CREATE_GCONF_PEER_LIBRARIES_TRUE = @CREATE_GCONF_PEER_LIBRARIES_TRUE@
+CREATE_GJDOC_FALSE = @CREATE_GJDOC_FALSE@
+CREATE_GJDOC_PARSER_FALSE = @CREATE_GJDOC_PARSER_FALSE@
+CREATE_GJDOC_PARSER_TRUE = @CREATE_GJDOC_PARSER_TRUE@
+CREATE_GJDOC_TRUE = @CREATE_GJDOC_TRUE@
+CREATE_GMPBI_LIBRARY_FALSE = @CREATE_GMPBI_LIBRARY_FALSE@
+CREATE_GMPBI_LIBRARY_TRUE = @CREATE_GMPBI_LIBRARY_TRUE@
CREATE_GSTREAMER_PEER_LIBRARIES_FALSE = @CREATE_GSTREAMER_PEER_LIBRARIES_FALSE@
CREATE_GSTREAMER_PEER_LIBRARIES_TRUE = @CREATE_GSTREAMER_PEER_LIBRARIES_TRUE@
CREATE_GTK_PEER_LIBRARIES_FALSE = @CREATE_GTK_PEER_LIBRARIES_FALSE@
@@ -180,11 +191,12 @@ ERROR_CFLAGS = @ERROR_CFLAGS@
EXAMPLESDIR = @EXAMPLESDIR@
EXEEXT = @EXEEXT@
EXTRA_CFLAGS = @EXTRA_CFLAGS@
-FASTJAR = @FASTJAR@
FGREP = @FGREP@
FIND = @FIND@
FREETYPE2_CFLAGS = @FREETYPE2_CFLAGS@
FREETYPE2_LIBS = @FREETYPE2_LIBS@
+GCJ_JAVAC_FALSE = @GCJ_JAVAC_FALSE@
+GCJ_JAVAC_TRUE = @GCJ_JAVAC_TRUE@
GCONF_CFLAGS = @GCONF_CFLAGS@
GCONF_LIBS = @GCONF_LIBS@
GDK_CFLAGS = @GDK_CFLAGS@
@@ -194,6 +206,8 @@ GENINSRC_TRUE = @GENINSRC_TRUE@
GJDOC = @GJDOC@
GLIB_CFLAGS = @GLIB_CFLAGS@
GLIB_LIBS = @GLIB_LIBS@
+GMP_CFLAGS = @GMP_CFLAGS@
+GMP_LIBS = @GMP_LIBS@
GREP = @GREP@
GSTREAMER_BASE_CFLAGS = @GSTREAMER_BASE_CFLAGS@
GSTREAMER_BASE_LIBS = @GSTREAMER_BASE_LIBS@
@@ -215,7 +229,10 @@ INSTALL_GLIBJ_ZIP_TRUE = @INSTALL_GLIBJ_ZIP_TRUE@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JAR = @JAR@
+JAVA = @JAVA@
JAVAC = @JAVAC@
+JAVAC_IS_GCJ = @JAVAC_IS_GCJ@
JAVAC_MEM_OPT = @JAVAC_MEM_OPT@
JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION = @JAVA_LANG_SYSTEM_EXPLICIT_INITIALIZATION@
JAVA_MAINTAINER_MODE_FALSE = @JAVA_MAINTAINER_MODE_FALSE@
@@ -281,8 +298,10 @@ USE_ESCHER_TRUE = @USE_ESCHER_TRUE@
USE_PREBUILT_GLIBJ_ZIP_FALSE = @USE_PREBUILT_GLIBJ_ZIP_FALSE@
USE_PREBUILT_GLIBJ_ZIP_TRUE = @USE_PREBUILT_GLIBJ_ZIP_TRUE@
VERSION = @VERSION@
-VM_BINARY = @VM_BINARY@
+WANT_NATIVE_BIG_INTEGER = @WANT_NATIVE_BIG_INTEGER@
WARNING_CFLAGS = @WARNING_CFLAGS@
+WITH_JAR_FALSE = @WITH_JAR_FALSE@
+WITH_JAR_TRUE = @WITH_JAR_TRUE@
XML_CFLAGS = @XML_CFLAGS@
XML_LIBS = @XML_LIBS@
XSLT_CFLAGS = @XSLT_CFLAGS@
@@ -293,6 +312,7 @@ X_EXTRA_LIBS = @X_EXTRA_LIBS@
X_LIBS = @X_LIBS@
X_PRE_LIBS = @X_PRE_LIBS@
ZIP = @ZIP@
+ac_ct_ANTLR = @ac_ct_ANTLR@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
@@ -352,6 +372,7 @@ target_cpu = @target_cpu@
target_os = @target_os@
target_vendor = @target_vendor@
toolexeclibdir = @toolexeclibdir@
+uudecode = @uudecode@
vm_classes = @vm_classes@
nativeexeclib_LTLIBRARIES = libjavanet.la
@ENABLE_LOCAL_SOCKETS_FALSE@local_sources = gnu_java_net_local_LocalSocketImpl.c
diff --git a/libjava/classpath/native/jni/java-net/java_net_VMNetworkInterface.c b/libjava/classpath/native/jni/java-net/java_net_VMNetworkInterface.c
index 73da5ee24f6..658299733e5 100644
--- a/libjava/classpath/native/jni/java-net/java_net_VMNetworkInterface.c
+++ b/libjava/classpath/native/jni/java-net/java_net_VMNetworkInterface.c
@@ -1,5 +1,5 @@
/* VMNetworkInterface.c - Native methods for NetworkInterface class
- Copyright (C) 2003, 2005, 2006 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2005, 2006, 2008 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -50,11 +50,24 @@ exception statement from your version. */
#include <stdio.h>
#include <string.h>
+#include <net/if.h>
+#include <sys/ioctl.h>
+/* Required on Solaris. */
+#include <unistd.h>
+
+#ifdef HAVE_SYS_SOCKIO_H
+# include <sys/sockio.h>
+#endif
+
#include <jni.h>
#include <jcl.h>
+#include <cpnative.h>
+#include <cpnet.h>
+
#include "java_net_VMNetworkInterface.h"
+int iff_flags(JNIEnv *, jstring, jint *);
static jmethodID java_net_VMNetworkInterface_init;
static jmethodID java_net_VMNetworkInterface_addAddress;
@@ -251,4 +264,136 @@ Java_java_net_VMNetworkInterface_getVMInterfaces (JNIEnv * env,
#endif /* HAVE_IFADDRS_H && HAVE_GETIFADDRS */
}
+int iff_flags(JNIEnv *env, jstring name, jint *flags)
+{
+ struct ifreq iff;
+ const char *iff_name;
+ jint socket;
+ int error, retval;
+
+ if ((error = cpnet_openSocketDatagram(env, &socket, AF_INET)))
+ {
+ return error;
+ }
+
+ iff_name = JCL_jstring_to_cstring(env, name);
+ memset(&iff, 0, sizeof(iff));
+ strcpy(iff.ifr_name, iff_name);
+
+ if (ioctl(socket, SIOCGIFFLAGS, &iff) >= 0)
+ {
+ *flags = (jint) iff.ifr_flags;
+
+ retval = 0;
+ }
+ else
+ {
+ retval = errno;
+ }
+
+ cpnet_close(env, socket);
+
+ JCL_free_cstring(env, name, iff_name);
+
+ return retval;
+}
+
+JNIEXPORT jboolean JNICALL
+Java_java_net_VMNetworkInterface_isUp (JNIEnv *env, jclass class UNUSED,
+ jstring name)
+{
+ jint flags;
+ int error;
+ jboolean retval;
+
+ if ((error = iff_flags(env, name, &flags)))
+ {
+ JCL_ThrowException(env, "java/net/SocketException",
+ cpnative_getErrorString(error));
+
+ retval = JNI_FALSE;
+ }
+ else
+ {
+ retval = (flags & (IFF_UP | IFF_RUNNING))
+ ? JNI_TRUE
+ : JNI_FALSE;
+ }
+
+ return retval;
+}
+
+JNIEXPORT jboolean JNICALL
+Java_java_net_VMNetworkInterface_isPointToPoint (JNIEnv *env,
+ jclass class UNUSED,
+ jstring name)
+{
+ jint flags;
+ int error;
+ jboolean retval;
+
+ if ((error = iff_flags(env, name, &flags)))
+ {
+ JCL_ThrowException(env, "java/net/SocketException",
+ cpnative_getErrorString(error));
+
+ retval = JNI_FALSE;
+ }
+ else
+ {
+ retval = (flags & IFF_POINTOPOINT) ? JNI_TRUE
+ : JNI_FALSE;
+ }
+
+ return retval;
+}
+
+JNIEXPORT jboolean JNICALL
+Java_java_net_VMNetworkInterface_isLoopback (JNIEnv *env,
+ jclass class UNUSED,
+ jstring name)
+{
+ jint flags;
+ int error;
+ jboolean retval;
+
+ if ((error = iff_flags(env, name, &flags)))
+ {
+ JCL_ThrowException(env, "java/net/SocketException",
+ cpnative_getErrorString(error));
+
+ retval = JNI_FALSE;
+ }
+ else
+ {
+ retval = (flags & IFF_LOOPBACK) ? JNI_TRUE : JNI_FALSE;
+ }
+
+ return retval;
+}
+
+JNIEXPORT jboolean JNICALL
+Java_java_net_VMNetworkInterface_supportsMulticast (JNIEnv *env,
+ jclass class UNUSED,
+ jstring name)
+{
+ jint flags;
+ int error;
+ jboolean retval;
+
+ if ((error = iff_flags(env, name, &flags)))
+ {
+ JCL_ThrowException(env, "java/net/SocketException",
+ cpnative_getErrorString(error));
+
+ retval = JNI_FALSE;
+ }
+ else
+ {
+ retval = (flags & IFF_MULTICAST) ? JNI_TRUE : JNI_FALSE;
+ }
+
+ return retval;
+}
+
/* end of file */
diff --git a/libjava/classpath/native/jni/java-net/local.c b/libjava/classpath/native/jni/java-net/local.c
index b7ec6f26480..53830f37179 100644
--- a/libjava/classpath/native/jni/java-net/local.c
+++ b/libjava/classpath/native/jni/java-net/local.c
@@ -73,27 +73,18 @@ local_create (int stream)
return socket (PF_UNIX, stream ? SOCK_STREAM : SOCK_DGRAM, 0);
}
-static int gcc_sucks = 0;
-
int
local_bind (int fd, const char *addr)
{
struct sockaddr_un saddr;
- /* For some reason, GCC 4.0.1 on Darwin/x86 MODIFIES the `addr'
- pointer in the CALLER's STACK FRAME after calling this function,
- but if we add this statement below, it doesn't! */
- if (gcc_sucks)
- fprintf (stderr, "bind %p\n", addr);
-
- if (strlen (addr) > sizeof (saddr.sun_path))
+ if (strlen (addr) >= sizeof (saddr.sun_path))
{
errno = ENAMETOOLONG;
return -1;
}
- strncpy (saddr.sun_path, addr, sizeof (saddr.sun_path));
- saddr.sun_path[sizeof (saddr.sun_path)] = '\0';
+ strcpy (saddr.sun_path, addr);
saddr.sun_family = AF_LOCAL;
return bind (fd, (struct sockaddr *) &saddr, SUN_LEN (&saddr));
OpenPOWER on IntegriCloud