1999-04-07 16:42:40 +02:00
|
|
|
|
// natRuntime.cc - Implementation of native side of Runtime class.
|
|
|
|
|
|
2006-01-06 02:03:45 +01:00
|
|
|
|
/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation
|
1999-04-07 16:42:40 +02:00
|
|
|
|
|
|
|
|
|
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>
|
2003-02-19 17:28:37 +01:00
|
|
|
|
#include <platform.h>
|
1999-04-07 16:42:40 +02:00
|
|
|
|
|
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
|
1999-09-11 00:03:10 +02:00
|
|
|
|
#include <gcj/cni.h>
|
1999-04-07 16:42:40 +02:00
|
|
|
|
#include <jvm.h>
|
2002-05-13 22:10:37 +02:00
|
|
|
|
#include <java-props.h>
|
2005-03-10 20:02:21 +01:00
|
|
|
|
#include <java-stack.h>
|
2002-05-13 22:10:37 +02:00
|
|
|
|
#include <java/lang/Long.h>
|
1999-04-07 16:42:40 +02:00
|
|
|
|
#include <java/lang/Runtime.h>
|
1999-05-05 16:19:24 +02:00
|
|
|
|
#include <java/lang/UnknownError.h>
|
|
|
|
|
#include <java/lang/UnsatisfiedLinkError.h>
|
2001-10-11 00:25:43 +02:00
|
|
|
|
#include <gnu/gcj/runtime/FinalizerThread.h>
|
2002-08-14 03:07:59 +02:00
|
|
|
|
#include <java/io/File.h>
|
2002-05-13 22:10:37 +02:00
|
|
|
|
#include <java/util/TimeZone.h>
|
|
|
|
|
#include <java/lang/StringBuffer.h>
|
|
|
|
|
#include <java/lang/Process.h>
|
|
|
|
|
#include <java/lang/ConcreteProcess.h>
|
2002-12-10 02:39:32 +01:00
|
|
|
|
#include <java/lang/ClassLoader.h>
|
1999-05-05 16:19:24 +02:00
|
|
|
|
|
2000-02-08 01:26:58 +01:00
|
|
|
|
#include <jni.h>
|
|
|
|
|
|
2002-05-13 22:10:37 +02:00
|
|
|
|
#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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1999-05-05 16:19:24 +02:00
|
|
|
|
#ifdef USE_LTDL
|
|
|
|
|
#include <ltdl.h>
|
2000-01-17 20:22:20 +01:00
|
|
|
|
|
|
|
|
|
/* FIXME: we don't always need this. The next libtool will let us use
|
|
|
|
|
AC_LTDL_PREOPEN to see if we do. */
|
2000-09-14 09:56:28 +02:00
|
|
|
|
extern const lt_dlsymlist lt_preloaded_symbols[1] = { { 0, 0 } };
|
2000-02-04 21:49:27 +01:00
|
|
|
|
|
2003-02-24 01:53:21 +01:00
|
|
|
|
struct lookup_data
|
2000-02-04 21:49:27 +01:00
|
|
|
|
{
|
2003-02-24 01:53:21 +01:00
|
|
|
|
const char *symname;
|
|
|
|
|
void *result;
|
|
|
|
|
};
|
2000-02-04 21:49:27 +01:00
|
|
|
|
|
2003-02-24 01:53:21 +01:00
|
|
|
|
static int
|
re PR libgcj/13056 (import new libltdl)
2003-12-16 Michael Koch <konqueror@gmx.de>
Fix for PR libgcj/13056.
* libltdl/configure.in,
libltdl/config.h.in: Removed.
* libltdl/configure.ac,
libltdl/config-h.in,
libltdl/install-sh,
libltdl/config.guess,
libltdl/config.sub,
libltdl/missing,
libltdl/mkinstalldirs,
libltdl/ltmain.sh: New files.
* libltdl/Makefile.am,
libltdl/acinclude.m4,
libltdl/aclocal.m4,
libltdl/ltdl.c,
libltdl/ltdl.h,
libltdl/README: Update to versions from libtool 1.5.
libltdl/configure,
* libltdl/Makefile.in: Regenerated.
* java/lang/natRuntime.cc (find_symbol):
Use type 'lt_ptr' instead of 'lt_ptr_t'.
From-SVN: r74711
2003-12-16 22:48:25 +01:00
|
|
|
|
find_symbol (lt_dlhandle handle, lt_ptr data)
|
2003-02-24 01:53:21 +01:00
|
|
|
|
{
|
|
|
|
|
lookup_data *ld = (lookup_data *) data;
|
|
|
|
|
ld->result = lt_dlsym (handle, ld->symname);
|
|
|
|
|
return ld->result != NULL;
|
2000-02-04 21:49:27 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void *
|
|
|
|
|
_Jv_FindSymbolInExecutable (const char *symname)
|
|
|
|
|
{
|
2003-02-24 01:53:21 +01:00
|
|
|
|
lookup_data data;
|
|
|
|
|
data.symname = symname;
|
|
|
|
|
data.result = NULL;
|
re PR libgcj/13056 (import new libltdl)
2003-12-16 Michael Koch <konqueror@gmx.de>
Fix for PR libgcj/13056.
* libltdl/configure.in,
libltdl/config.h.in: Removed.
* libltdl/configure.ac,
libltdl/config-h.in,
libltdl/install-sh,
libltdl/config.guess,
libltdl/config.sub,
libltdl/missing,
libltdl/mkinstalldirs,
libltdl/ltmain.sh: New files.
* libltdl/Makefile.am,
libltdl/acinclude.m4,
libltdl/aclocal.m4,
libltdl/ltdl.c,
libltdl/ltdl.h,
libltdl/README: Update to versions from libtool 1.5.
libltdl/configure,
* libltdl/Makefile.in: Regenerated.
* java/lang/natRuntime.cc (find_symbol):
Use type 'lt_ptr' instead of 'lt_ptr_t'.
From-SVN: r74711
2003-12-16 22:48:25 +01:00
|
|
|
|
lt_dlforeach (find_symbol, (lt_ptr) &data);
|
2003-02-24 01:53:21 +01:00
|
|
|
|
return data.result;
|
2000-02-04 21:49:27 +01:00
|
|
|
|
}
|
|
|
|
|
|
2001-06-02 21:40:53 +02:00
|
|
|
|
#else
|
|
|
|
|
|
|
|
|
|
void *
|
2002-10-25 05:28:00 +02:00
|
|
|
|
_Jv_FindSymbolInExecutable (const char *)
|
2001-06-02 21:40:53 +02:00
|
|
|
|
{
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
|
|
|
|
|
2000-02-04 21:49:27 +01:00
|
|
|
|
#endif /* USE_LTDL */
|
1999-04-07 16:42:40 +02:00
|
|
|
|
|
2002-05-13 22:10:37 +02:00
|
|
|
|
|
1999-04-07 16:42:40 +02:00
|
|
|
|
|
2006-01-06 02:03:45 +01:00
|
|
|
|
void
|
|
|
|
|
java::lang::Runtime::runFinalizationForExit ()
|
|
|
|
|
{
|
|
|
|
|
if (finalizeOnExit)
|
|
|
|
|
_Jv_RunAllFinalizers ();
|
|
|
|
|
}
|
|
|
|
|
|
2001-03-12 08:40:17 +01:00
|
|
|
|
void
|
2002-05-13 22:10:37 +02:00
|
|
|
|
java::lang::Runtime::exitInternal (jint status)
|
2001-03-12 08:40:17 +01:00
|
|
|
|
{
|
1999-04-07 16:42:40 +02:00
|
|
|
|
// 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 ();
|
|
|
|
|
}
|
|
|
|
|
|
2003-03-17 01:45:37 +01:00
|
|
|
|
#ifdef USE_LTDL
|
|
|
|
|
// List of names for JNI_OnLoad.
|
|
|
|
|
static const char *onload_names[] = _Jv_platform_onload_names;
|
|
|
|
|
#endif
|
|
|
|
|
|
1999-05-05 16:19:24 +02:00
|
|
|
|
void
|
2000-02-08 01:26:58 +01:00
|
|
|
|
java::lang::Runtime::_load (jstring path, jboolean do_search)
|
1999-05-05 16:19:24 +02:00
|
|
|
|
{
|
|
|
|
|
JvSynchronize sync (this);
|
|
|
|
|
using namespace java::lang;
|
|
|
|
|
#ifdef USE_LTDL
|
2000-01-17 20:22:20 +01:00
|
|
|
|
jint len = _Jv_GetStringUTFLength (path);
|
2002-12-10 02:39:32 +01:00
|
|
|
|
char buf[len + 1 + strlen (_Jv_platform_solib_prefix)
|
|
|
|
|
+ strlen (_Jv_platform_solib_suffix)];
|
2000-02-15 08:53:11 +01:00
|
|
|
|
int offset = 0;
|
|
|
|
|
if (do_search)
|
|
|
|
|
{
|
2002-12-10 02:39:32 +01:00
|
|
|
|
strcpy (buf, _Jv_platform_solib_prefix);
|
|
|
|
|
offset = strlen (_Jv_platform_solib_prefix);
|
2000-02-15 08:53:11 +01:00
|
|
|
|
}
|
|
|
|
|
jsize total = JvGetStringUTFRegion (path, 0, path->length(), &buf[offset]);
|
|
|
|
|
buf[offset + total] = '\0';
|
2002-12-10 02:39:32 +01:00
|
|
|
|
|
|
|
|
|
char *lib_name = buf;
|
|
|
|
|
|
|
|
|
|
if (do_search)
|
|
|
|
|
{
|
2005-03-10 20:02:21 +01:00
|
|
|
|
ClassLoader *look = _Jv_StackTrace::GetFirstNonSystemClassLoader ();
|
2003-01-14 20:26:21 +01:00
|
|
|
|
|
2002-12-10 02:39:32 +01:00
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2001-10-16 10:35:17 +02:00
|
|
|
|
lt_dlhandle h;
|
1999-05-05 16:19:24 +02:00
|
|
|
|
// FIXME: make sure path is absolute.
|
2001-10-16 10:35:17 +02:00
|
|
|
|
{
|
|
|
|
|
// 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$);
|
2002-12-10 02:39:32 +01:00
|
|
|
|
h = do_search ? lt_dlopenext (lib_name) : lt_dlopen (lib_name);
|
2001-10-16 10:35:17 +02:00
|
|
|
|
}
|
1999-05-05 16:19:24 +02:00
|
|
|
|
if (h == NULL)
|
|
|
|
|
{
|
|
|
|
|
const char *msg = lt_dlerror ();
|
2003-07-25 15:04:15 +02:00
|
|
|
|
jstring str = JvNewStringLatin1 (lib_name);
|
|
|
|
|
str = str->concat (JvNewStringLatin1 (": "));
|
2000-02-15 09:51:04 +01:00
|
|
|
|
str = str->concat (JvNewStringLatin1 (msg));
|
exception.cc (java_eh_info): Make value type jthrowable.
* exception.cc (java_eh_info): Make value type jthrowable.
(_Jv_type_matcher): Remove now unneeded cast.
(_Jv_Throw): Make argument type jthrowable. Munge name
for SJLJ_EXCEPTIONS here ...
* gcj/cni.h: ... not here.
(JvThrow): Remove.
* gcj/javaprims.h (_Jv_Throw, _Jv_Sjlj_Throw): Update declarations.
* defineclass.cc, interpret.cc, jni.cc, posix-threads.cc,
prims.cc, resolve.cc, gnu/gcj/runtime/natFirstThread.cc,
gnu/gcj/xlib/natDrawable.cc, gnu/gcj/xlib/natFont.cc,
gnu/gcj/xlib/natWMSizeHints.cc, gnu/gcj/xlib/natWindowAttributes.cc,
gnu/gcj/xlib/natXImage.cc, java/io/natFile.cc,
java/io/natFileDescriptorEcos.cc, java/io/natFileDescriptorPosix.cc,
java/io/natFileDescriptorWin32.cc, java/io/natFileWin32.cc,
java/lang/natClass.cc, java/lang/natClassLoader.cc,
java/lang/natDouble.cc, java/lang/natObject.cc,
java/lang/natPosixProcess.cc, java/lang/natRuntime.cc,
java/lang/natString.cc, java/lang/natSystem.cc,
java/lang/natThread.cc, java/lang/reflect/natArray.cc,
java/lang/reflect/natConstructor.cc, java/lang/reflect/natField.cc,
java/lang/reflect/natMethod.cc, java/util/zip/natDeflater.cc,
java/util/zip/natInflater.cc:
Use throw, not JvThrow or _Jv_Throw.
From-SVN: r40838
2001-03-26 09:05:32 +02:00
|
|
|
|
throw new UnsatisfiedLinkError (str);
|
1999-05-05 16:19:24 +02:00
|
|
|
|
}
|
|
|
|
|
|
2003-03-17 01:45:37 +01:00
|
|
|
|
// Search for JNI_OnLoad function.
|
|
|
|
|
void *onload = NULL;
|
|
|
|
|
const char **name = onload_names;
|
|
|
|
|
while (*name != NULL)
|
2003-02-03 22:23:59 +01:00
|
|
|
|
{
|
2003-03-17 01:45:37 +01:00
|
|
|
|
onload = lt_dlsym (h, *name);
|
|
|
|
|
if (onload != NULL)
|
|
|
|
|
break;
|
|
|
|
|
++name;
|
2003-02-03 22:23:59 +01:00
|
|
|
|
}
|
|
|
|
|
|
2000-02-08 01:26:58 +01:00
|
|
|
|
if (onload != NULL)
|
1999-05-05 16:19:24 +02:00
|
|
|
|
{
|
2000-02-18 22:22:06 +01:00
|
|
|
|
JavaVM *vm = _Jv_GetJavaVM ();
|
|
|
|
|
if (vm == NULL)
|
|
|
|
|
{
|
|
|
|
|
// FIXME: what?
|
|
|
|
|
return;
|
|
|
|
|
}
|
2003-02-03 22:23:59 +01:00
|
|
|
|
jint vers = ((jint (JNICALL *) (JavaVM *, void *)) onload) (vm, NULL);
|
2002-04-10 22:36:04 +02:00
|
|
|
|
if (vers != JNI_VERSION_1_1 && vers != JNI_VERSION_1_2
|
|
|
|
|
&& vers != JNI_VERSION_1_4)
|
2000-02-08 01:26:58 +01:00
|
|
|
|
{
|
|
|
|
|
// FIXME: unload the library.
|
exception.cc (java_eh_info): Make value type jthrowable.
* exception.cc (java_eh_info): Make value type jthrowable.
(_Jv_type_matcher): Remove now unneeded cast.
(_Jv_Throw): Make argument type jthrowable. Munge name
for SJLJ_EXCEPTIONS here ...
* gcj/cni.h: ... not here.
(JvThrow): Remove.
* gcj/javaprims.h (_Jv_Throw, _Jv_Sjlj_Throw): Update declarations.
* defineclass.cc, interpret.cc, jni.cc, posix-threads.cc,
prims.cc, resolve.cc, gnu/gcj/runtime/natFirstThread.cc,
gnu/gcj/xlib/natDrawable.cc, gnu/gcj/xlib/natFont.cc,
gnu/gcj/xlib/natWMSizeHints.cc, gnu/gcj/xlib/natWindowAttributes.cc,
gnu/gcj/xlib/natXImage.cc, java/io/natFile.cc,
java/io/natFileDescriptorEcos.cc, java/io/natFileDescriptorPosix.cc,
java/io/natFileDescriptorWin32.cc, java/io/natFileWin32.cc,
java/lang/natClass.cc, java/lang/natClassLoader.cc,
java/lang/natDouble.cc, java/lang/natObject.cc,
java/lang/natPosixProcess.cc, java/lang/natRuntime.cc,
java/lang/natString.cc, java/lang/natSystem.cc,
java/lang/natThread.cc, java/lang/reflect/natArray.cc,
java/lang/reflect/natConstructor.cc, java/lang/reflect/natField.cc,
java/lang/reflect/natMethod.cc, java/util/zip/natDeflater.cc,
java/util/zip/natInflater.cc:
Use throw, not JvThrow or _Jv_Throw.
From-SVN: r40838
2001-03-26 09:05:32 +02:00
|
|
|
|
throw new UnsatisfiedLinkError (JvNewStringLatin1 ("unrecognized version from JNI_OnLoad"));
|
2000-02-08 01:26:58 +01:00
|
|
|
|
}
|
1999-05-05 16:19:24 +02:00
|
|
|
|
}
|
|
|
|
|
#else
|
exception.cc (java_eh_info): Make value type jthrowable.
* exception.cc (java_eh_info): Make value type jthrowable.
(_Jv_type_matcher): Remove now unneeded cast.
(_Jv_Throw): Make argument type jthrowable. Munge name
for SJLJ_EXCEPTIONS here ...
* gcj/cni.h: ... not here.
(JvThrow): Remove.
* gcj/javaprims.h (_Jv_Throw, _Jv_Sjlj_Throw): Update declarations.
* defineclass.cc, interpret.cc, jni.cc, posix-threads.cc,
prims.cc, resolve.cc, gnu/gcj/runtime/natFirstThread.cc,
gnu/gcj/xlib/natDrawable.cc, gnu/gcj/xlib/natFont.cc,
gnu/gcj/xlib/natWMSizeHints.cc, gnu/gcj/xlib/natWindowAttributes.cc,
gnu/gcj/xlib/natXImage.cc, java/io/natFile.cc,
java/io/natFileDescriptorEcos.cc, java/io/natFileDescriptorPosix.cc,
java/io/natFileDescriptorWin32.cc, java/io/natFileWin32.cc,
java/lang/natClass.cc, java/lang/natClassLoader.cc,
java/lang/natDouble.cc, java/lang/natObject.cc,
java/lang/natPosixProcess.cc, java/lang/natRuntime.cc,
java/lang/natString.cc, java/lang/natSystem.cc,
java/lang/natThread.cc, java/lang/reflect/natArray.cc,
java/lang/reflect/natConstructor.cc, java/lang/reflect/natField.cc,
java/lang/reflect/natMethod.cc, java/util/zip/natDeflater.cc,
java/util/zip/natInflater.cc:
Use throw, not JvThrow or _Jv_Throw.
From-SVN: r40838
2001-03-26 09:05:32 +02:00
|
|
|
|
throw new UnknownError
|
|
|
|
|
(JvNewStringLatin1 (do_search
|
|
|
|
|
? "Runtime.loadLibrary not implemented"
|
|
|
|
|
: "Runtime.load not implemented"));
|
1999-05-05 16:19:24 +02:00
|
|
|
|
#endif /* USE_LTDL */
|
|
|
|
|
}
|
|
|
|
|
|
2000-01-17 20:22:20 +01:00
|
|
|
|
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 */
|
|
|
|
|
}
|
|
|
|
|
|
1999-05-05 16:19:24 +02:00
|
|
|
|
void
|
|
|
|
|
java::lang::Runtime::init (void)
|
|
|
|
|
{
|
|
|
|
|
#ifdef USE_LTDL
|
|
|
|
|
lt_dlinit ();
|
2005-09-08 23:26:25 +02:00
|
|
|
|
// Set module load path.
|
|
|
|
|
lt_dlsetsearchpath (_Jv_Module_Load_Path);
|
2003-02-24 01:53:21 +01:00
|
|
|
|
// Make sure self is opened.
|
|
|
|
|
lt_dlopen (NULL);
|
1999-05-05 16:19:24 +02:00
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
1999-04-07 16:42:40 +02:00
|
|
|
|
void
|
|
|
|
|
java::lang::Runtime::runFinalization (void)
|
|
|
|
|
{
|
2001-10-11 00:25:43 +02:00
|
|
|
|
gnu::gcj::runtime::FinalizerThread::finalizerReady ();
|
1999-04-07 16:42:40 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
jlong
|
|
|
|
|
java::lang::Runtime::totalMemory (void)
|
|
|
|
|
{
|
|
|
|
|
return _Jv_GCTotalMemory ();
|
|
|
|
|
}
|
|
|
|
|
|
2002-05-13 22:10:37 +02:00
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
|
1999-04-07 16:42:40 +02:00
|
|
|
|
void
|
|
|
|
|
java::lang::Runtime::traceInstructions (jboolean)
|
|
|
|
|
{
|
|
|
|
|
// Do nothing.
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
java::lang::Runtime::traceMethodCalls (jboolean)
|
|
|
|
|
{
|
|
|
|
|
// Do nothing.
|
|
|
|
|
}
|
2002-05-13 22:10:37 +02:00
|
|
|
|
|
|
|
|
|
java::lang::Process *
|
|
|
|
|
java::lang::Runtime::execInternal (jstringArray cmd,
|
2002-08-14 03:07:59 +02:00
|
|
|
|
jstringArray env,
|
|
|
|
|
java::io::File *dir)
|
2002-05-13 22:10:37 +02:00
|
|
|
|
{
|
2002-08-14 03:07:59 +02:00
|
|
|
|
return new java::lang::ConcreteProcess (cmd, env, dir);
|
2002-05-13 22:10:37 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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)
|
2003-03-17 01:45:37 +01:00
|
|
|
|
sb->append (_Jv_platform_file_separator);
|
2002-05-13 22:10:37 +02:00
|
|
|
|
|
2002-12-10 02:39:32 +01:00
|
|
|
|
sb->append (JvNewStringLatin1 (_Jv_platform_solib_prefix));
|
2002-05-13 22:10:37 +02:00
|
|
|
|
sb->append(libname);
|
2002-12-10 02:39:32 +01:00
|
|
|
|
sb->append (JvNewStringLatin1 (_Jv_platform_solib_suffix));
|
2002-05-13 22:10:37 +02:00
|
|
|
|
|
|
|
|
|
return sb->toString();
|
|
|
|
|
}
|