diff options
Diffstat (limited to 'libjava/java/lang/natRuntime.cc')
-rw-r--r-- | libjava/java/lang/natRuntime.cc | 323 |
1 files changed, 0 insertions, 323 deletions
diff --git a/libjava/java/lang/natRuntime.cc b/libjava/java/lang/natRuntime.cc deleted file mode 100644 index 02842b1..0000000 --- a/libjava/java/lang/natRuntime.cc +++ /dev/null @@ -1,323 +0,0 @@ -// natRuntime.cc - Implementation of native side of Runtime class. - -/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation - - This file is part of libgcj. - -This software is copyrighted work licensed under the terms of the -Libgcj License. Please consult the file "LIBGCJ_LICENSE" for -details. */ - -#include <config.h> -#include <platform.h> - -#include <stdlib.h> - -#include <gcj/cni.h> -#include <jvm.h> -#include <java-props.h> -#include <java-stack.h> -#include <java/lang/Long.h> -#include <java/lang/Runtime.h> -#include <java/lang/UnknownError.h> -#include <java/lang/UnsatisfiedLinkError.h> -#include <gnu/gcj/runtime/FinalizerThread.h> -#include <java/io/File.h> -#include <java/util/TimeZone.h> -#include <java/lang/StringBuffer.h> -#include <java/lang/Process.h> -#include <java/lang/ClassLoader.h> - -// It is convenient and safe to simply include all of these. -#include <java/lang/Win32Process.h> -#include <java/lang/EcosProcess.h> -#include <java/lang/PosixProcess.h> - -#include <jni.h> - -#ifdef HAVE_PWD_H -#include <pwd.h> -#endif -#include <errno.h> - -#ifdef HAVE_LOCALE_H -#include <locale.h> -#endif - -#ifdef HAVE_LANGINFO_H -#include <langinfo.h> -#endif - - - -#ifdef USE_LTDL -#include <ltdl.h> - -/* FIXME: we don't always need this. The next libtool will let us use - AC_LTDL_PREOPEN to see if we do. */ -extern const lt_dlsymlist lt_preloaded_symbols[1] = { { 0, 0 } }; - -struct lookup_data -{ - const char *symname; - void *result; -}; - -static int -find_symbol (lt_dlhandle handle, lt_ptr data) -{ - lookup_data *ld = (lookup_data *) data; - ld->result = lt_dlsym (handle, ld->symname); - return ld->result != NULL; -} - -void * -_Jv_FindSymbolInExecutable (const char *symname) -{ - lookup_data data; - data.symname = symname; - data.result = NULL; - lt_dlforeach (find_symbol, (lt_ptr) &data); - return data.result; -} - -#else - -void * -_Jv_FindSymbolInExecutable (const char *) -{ - return NULL; -} - -#endif /* USE_LTDL */ - - - -void -java::lang::Runtime::runFinalizationForExit () -{ - if (finalizeOnExit) - _Jv_RunAllFinalizers (); -} - -void -java::lang::Runtime::exitInternal (jint status) -{ - // Make status right for Unix. This is perhaps strange. - if (status < 0 || status > 255) - status = 255; - - ::exit (status); -} - -jlong -java::lang::Runtime::freeMemory (void) -{ - return _Jv_GCFreeMemory (); -} - -void -java::lang::Runtime::gc (void) -{ - _Jv_RunGC (); -} - -#ifdef USE_LTDL -// List of names for JNI_OnLoad. -static const char *onload_names[] = _Jv_platform_onload_names; -#endif - -void -java::lang::Runtime::_load (jstring path, jboolean do_search) -{ - JvSynchronize sync (this); - using namespace java::lang; -#ifdef USE_LTDL - jint len = _Jv_GetStringUTFLength (path); - char buf[len + 1 + strlen (_Jv_platform_solib_prefix) - + strlen (_Jv_platform_solib_suffix)]; - int offset = 0; - if (do_search) - { - strcpy (buf, _Jv_platform_solib_prefix); - offset = strlen (_Jv_platform_solib_prefix); - } - jsize total = JvGetStringUTFRegion (path, 0, path->length(), &buf[offset]); - buf[offset + total] = '\0'; - - char *lib_name = buf; - - if (do_search) - { - ClassLoader *look = _Jv_StackTrace::GetFirstNonSystemClassLoader (); - - if (look != NULL) - { - // Don't include solib prefix in string passed to - // findLibrary. - jstring name = look->findLibrary(JvNewStringUTF(&buf[offset])); - if (name != NULL) - { - len = _Jv_GetStringUTFLength (name); - lib_name = (char *) _Jv_AllocBytes(len + 1); - total = JvGetStringUTFRegion (name, 0, - name->length(), lib_name); - lib_name[total] = '\0'; - // Don't append suffixes any more; we have the full file - // name. - do_search = false; - } - } - } - - lt_dlhandle h; - // FIXME: make sure path is absolute. - { - // Synchronize on java.lang.Class. This is to protect the class chain from - // concurrent modification by class registration calls which may be run - // during the dlopen(). - JvSynchronize sync (&java::lang::Class::class$); - h = do_search ? lt_dlopenext (lib_name) : lt_dlopen (lib_name); - } - if (h == NULL) - { - const char *msg = lt_dlerror (); - jstring str = JvNewStringLatin1 (lib_name); - str = str->concat (JvNewStringLatin1 (": ")); - str = str->concat (JvNewStringLatin1 (msg)); - throw new UnsatisfiedLinkError (str); - } - - // Search for JNI_OnLoad function. - void *onload = NULL; - const char **name = onload_names; - while (*name != NULL) - { - onload = lt_dlsym (h, *name); - if (onload != NULL) - break; - ++name; - } - - if (onload != NULL) - { - JavaVM *vm = _Jv_GetJavaVM (); - if (vm == NULL) - { - // FIXME: what? - return; - } - - // Push a new frame so that JNI_OnLoad will get the right class - // loader if it calls FindClass. - ::java::lang::ClassLoader *loader - = _Jv_StackTrace::GetFirstNonSystemClassLoader(); - JNIEnv *env = _Jv_GetJNIEnvNewFrameWithLoader (loader); - jint vers = ((jint (JNICALL *) (JavaVM *, void *)) onload) (vm, NULL); - _Jv_JNI_PopSystemFrame (env); - if (vers != JNI_VERSION_1_1 && vers != JNI_VERSION_1_2 - && vers != JNI_VERSION_1_4) - { - // FIXME: unload the library. - throw new UnsatisfiedLinkError (JvNewStringLatin1 ("unrecognized version from JNI_OnLoad")); - } - } -#else - throw new UnknownError - (JvNewStringLatin1 (do_search - ? "Runtime.loadLibrary not implemented" - : "Runtime.load not implemented")); -#endif /* USE_LTDL */ -} - -jboolean -java::lang::Runtime::loadLibraryInternal (jstring lib) -{ - JvSynchronize sync (this); - using namespace java::lang; -#ifdef USE_LTDL - jint len = _Jv_GetStringUTFLength (lib); - char buf[len + 1]; - jsize total = JvGetStringUTFRegion (lib, 0, lib->length(), buf); - buf[total] = '\0'; - // FIXME: make sure path is absolute. - lt_dlhandle h = lt_dlopenext (buf); - return h != NULL; -#else - return false; -#endif /* USE_LTDL */ -} - -void -java::lang::Runtime::init (void) -{ -#ifdef USE_LTDL - lt_dlinit (); - // Set module load path. - lt_dlsetsearchpath (_Jv_Module_Load_Path); - // Make sure self is opened. - lt_dlopen (NULL); -#endif -} - -void -java::lang::Runtime::runFinalization (void) -{ - gnu::gcj::runtime::FinalizerThread::finalizerReady (); -} - -jlong -java::lang::Runtime::totalMemory (void) -{ - return _Jv_GCTotalMemory (); -} - -jlong -java::lang::Runtime::maxMemory (void) -{ - // We don't have a maximum. FIXME: we might if we ask the GC for - // one. - return Long::MAX_VALUE; -} - -void -java::lang::Runtime::traceInstructions (jboolean) -{ - // Do nothing. -} - -void -java::lang::Runtime::traceMethodCalls (jboolean) -{ - // Do nothing. -} - -java::lang::Process * -java::lang::Runtime::execInternal (jstringArray cmd, - jstringArray env, - java::io::File *dir) -{ - return new _Jv_platform_process (cmd, env, dir, false); -} - -jint -java::lang::Runtime::availableProcessors (void) -{ - // FIXME: find the real value. - return 1; -} - -jstring -java::lang::Runtime::nativeGetLibname (jstring pathname, jstring libname) -{ - java::lang::StringBuffer *sb = new java::lang::StringBuffer (); - sb->append(pathname); - if (pathname->length() > 0) - sb->append (_Jv_platform_file_separator); - - sb->append (JvNewStringLatin1 (_Jv_platform_solib_prefix)); - sb->append(libname); - sb->append (JvNewStringLatin1 (_Jv_platform_solib_suffix)); - - return sb->toString(); -} |