summaryrefslogtreecommitdiffstats
path: root/libjava/prims.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/prims.cc')
-rw-r--r--libjava/prims.cc33
1 files changed, 28 insertions, 5 deletions
diff --git a/libjava/prims.cc b/libjava/prims.cc
index 817b0a8a46a..38714b300d9 100644
--- a/libjava/prims.cc
+++ b/libjava/prims.cc
@@ -79,6 +79,9 @@ static java::lang::OutOfMemoryError *no_memory;
// Properties set at compile time.
const char **_Jv_Compiler_Properties;
+// The JAR file to add to the beginning of java.class.path.
+const char *_Jv_Jar_Class_Path;
+
#ifndef DISABLE_GETENV_PROPERTIES
// Property key/value pairs.
property_pair *_Jv_Environment_Properties;
@@ -888,8 +891,9 @@ JvRunMain (jclass klass, int argc, const char **argv)
}
void
-_Jv_RunMain (const char *class_name, int argc, const char **argv)
+_Jv_RunMain (const char *name, int argc, const char **argv, bool is_jar)
{
+ jstring class_name;
PROCESS_GCJ_PROPERTIES;
main_init ();
@@ -900,12 +904,31 @@ _Jv_RunMain (const char *class_name, int argc, const char **argv)
_Jv_ThisExecutable (exec_name);
#endif
+ if (is_jar)
+ {
+ _Jv_Jar_Class_Path = strdup (name);
+ arg_vec = JvConvertArgv (1, &_Jv_Jar_Class_Path);
+
+ main_thread =
+ new gnu::gcj::runtime::FirstThread (&_CL_Q43gnu3gcj7runtime11FirstThread,
+ arg_vec);
+ main_thread->start();
+ _Jv_ThreadWait ();
+
+ class_name = gnu::gcj::runtime::FirstThread::jarMainClassName;
+ }
+ else
+ class_name = JvNewStringLatin1 (name);
+
arg_vec = JvConvertArgv (argc - 1, argv + 1);
- main_thread = new gnu::gcj::runtime::FirstThread (JvNewStringLatin1 (class_name),
- arg_vec);
- main_thread->start();
- _Jv_ThreadWait ();
+ if (class_name)
+ {
+ main_thread = new gnu::gcj::runtime::FirstThread (class_name, arg_vec);
+ main_thread->start();
+ _Jv_ThreadWait ();
+ }
+
java::lang::Runtime::getRuntime ()->exit (0);
}
OpenPOWER on IntegriCloud