From: Christian Thalinger Date: Fri, 21 Sep 2007 10:39:47 +0000 (+0200) Subject: * configure.ac (AC_CHECK_FUNCS): Added getsockopt. X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=commitdiff_plain;h=e5aa2f54493620de9e77278aa7d5a96248de0466;p=cacao.git * configure.ac (AC_CHECK_FUNCS): Added getsockopt. * src/native/vm/sun/jvm.c (stdint.h): Added. (sys/types.h): Likewise. (JVM_HoldsLock): Implemented. (JVM_SocketAvailable): Likewise. (JVM_GetSockOpt): Likewise. (JVM_SetSockOpt) [HAVE_SETSOCKOPT]: Added #ifdef. --- diff --git a/configure.ac b/configure.ac index 7a30b4418..b31143bd6 100644 --- a/configure.ac +++ b/configure.ac @@ -294,6 +294,7 @@ AC_CHECK_FUNCS([gethostname]) AC_CHECK_FUNCS([getpagesize]) AC_CHECK_FUNCS([getrusage]) AC_CHECK_FUNCS([getsockname]) +AC_CHECK_FUNCS([getsockopt]) AC_CHECK_FUNCS([gettimeofday]) AC_CHECK_FUNCS([htons]) AC_CHECK_FUNCS([ioctl]) diff --git a/src/native/vm/sun/jvm.c b/src/native/vm/sun/jvm.c index 5cf113b15..4c8692069 100644 --- a/src/native/vm/sun/jvm.c +++ b/src/native/vm/sun/jvm.c @@ -33,6 +33,7 @@ #include #include #include +#include #include #include #include @@ -44,6 +45,7 @@ #include #include +#include #include "vm/types.h" @@ -2155,7 +2157,21 @@ jboolean JVM_IsInterrupted(JNIEnv* env, jobject jthread, jboolean clear_interrup jboolean JVM_HoldsLock(JNIEnv* env, jclass threadClass, jobject obj) { - log_println("JVM_HoldsLock: IMPLEMENT ME!"); + java_handle_t *h; + bool result; + + TRACEJVMCALLS("JVM_HoldsLock(env=%p, threadClass=%p, obj=%p)", env, threadClass, obj); + + h = (java_handle_t *) obj; + + if (h == NULL) { + exceptions_throw_nullpointerexception(); + return JNI_FALSE; + } + + result = lock_is_held_by_current_thread(h); + + return result; } @@ -2562,7 +2578,22 @@ jint JVM_SendTo(jint fd, char *buf, int len, int flags, struct sockaddr *to, int jint JVM_SocketAvailable(jint fd, jint *pbytes) { - log_println("JVM_SocketAvailable: IMPLEMENT ME!"); +#if defined(FIONREAD) + int bytes; + + TRACEJVMCALLS("JVM_SocketAvailable(fd=%d, pbytes=%p)", fd, pbytes); + + *pbytes = 0; + + if (ioctl(fd, FIONREAD, &bytes) < 0) + return 0; + + *pbytes = bytes; + + return 1; +#else +# error FIONREAD not defined +#endif } @@ -2570,7 +2601,13 @@ jint JVM_SocketAvailable(jint fd, jint *pbytes) jint JVM_GetSockOpt(jint fd, int level, int optname, char *optval, int *optlen) { - log_println("JVM_GetSockOpt: IMPLEMENT ME!"); +#if defined(HAVE_GETSOCKOPT) + TRACEJVMCALLS("JVM_GetSockOpt(fd=%d, level=%d, optname=%d, optval=%s, optlen=%p)", fd, level, optname, optval, optlen); + + return getsockopt(fd, level, optname, optval, (socklen_t *) optlen); +#else +# error getsockopt not available +#endif } @@ -2578,9 +2615,13 @@ jint JVM_GetSockOpt(jint fd, int level, int optname, char *optval, int *optlen) jint JVM_SetSockOpt(jint fd, int level, int optname, const char *optval, int optlen) { +#if defined(HAVE_SETSOCKOPT) TRACEJVMCALLS("JVM_SetSockOpt(fd=%d, level=%d, optname=%d, optval=%s, optlen=%d)", fd, level, optname, optval, optlen); return setsockopt(fd, level, optname, optval, optlen); +#else +# error setsockopt not available +#endif }