1 /* class: java/lang/Runtime */
5 #include <sys/utsname.h>
13 #include "java_io_File.h"
14 #include "java_lang_String.h"
15 #include "java_util_Properties.h" /* needed for java_lang_Runtime.h */
16 #include "java_lang_Runtime.h"
23 static int activeprops = 19;
25 static char *proplist[MAXPROPS][2] = {
26 { "java.class.path", NULL },
27 { "java.home", NULL },
28 { "user.home", NULL },
29 { "user.name", NULL },
34 { "os.version", NULL },
36 { "java.class.version", "45.3" },
37 { "java.version", PACKAGE":"VERSION },
38 { "java.vendor", "CACAO Team" },
39 { "java.vendor.url", "http://www.complang.tuwien.ac.at/java/cacao/" },
40 { "java.vm.name", "CACAO"},
41 { "java.tmpdir", "/tmp/"},
42 { "java.io.tmpdir", "/tmp/"},
44 { "path.separator", ":" },
45 { "file.separator", "/" },
46 { "line.separator", "\n" },
47 { "java.protocol.handler.pkgs", "gnu.java.net.protocol"}
52 * Class: java_lang_Runtime
53 * Method: execInternal
54 * Signature: ([Ljava/lang/String;[Ljava/lang/String;Ljava/io/File;)Ljava/lang/Process;
56 JNIEXPORT struct java_lang_Process* JNICALL Java_java_lang_Runtime_execInternal (JNIEnv *env , struct java_lang_Runtime* this ,
57 java_objectarray* cmd, java_objectarray* shellenv, struct java_io_File* workingdir)
59 log_text("Java_java_lang_Runtime_execInternal called");
65 * Class: java/lang/Runtime
66 * Method: exitInternal
69 JNIEXPORT void JNICALL Java_java_lang_Runtime_exitInternal ( JNIEnv *env , struct java_lang_Runtime* this, s4 par1)
71 cacao_shutdown (par1);
76 * Class: java/lang/Runtime
80 JNIEXPORT s8 JNICALL Java_java_lang_Runtime_freeMemory ( JNIEnv *env , struct java_lang_Runtime* this)
82 log_text ("java_lang_Runtime_freeMemory called");
83 return builtin_i2l (0);
88 * Class: java/lang/Runtime
92 JNIEXPORT void JNICALL Java_java_lang_Runtime_gc ( JNIEnv *env , struct java_lang_Runtime* this)
99 * Class: java/lang/Runtime
100 * Method: runFinalization
103 JNIEXPORT void JNICALL Java_java_lang_Runtime_runFinalization ( JNIEnv *env, struct java_lang_Runtime* this)
105 log_text("Java_java_lang_Runtime_runFinalization0 called");
110 * Class: java/lang/Runtime
111 * Method: runFinalizersOnExit
114 JNIEXPORT void JNICALL Java_java_lang_Runtime_runFinalizersOnExitInternal ( JNIEnv *env , jclass clazz, s4 par1)
116 log_text("Java_java_lang_Runtime_runFinalizersOnExit0 called");
121 * Class: java/lang/Runtime
122 * Method: totalMemory
125 JNIEXPORT s8 JNICALL Java_java_lang_Runtime_totalMemory ( JNIEnv *env , struct java_lang_Runtime* this)
127 log_text ("java_lang_Runtime_totalMemory called");
128 return builtin_i2l (0);
133 * Class: java/lang/Runtime
134 * Method: traceInstructions
137 JNIEXPORT void JNICALL Java_java_lang_Runtime_traceInstructions ( JNIEnv *env , struct java_lang_Runtime* this, s4 par1)
139 log_text("Java_java_lang_Runtime_traceInstructions called");
144 * Class: java/lang/Runtime
145 * Method: traceMethodCalls
148 JNIEXPORT void JNICALL Java_java_lang_Runtime_traceMethodCalls ( JNIEnv *env , struct java_lang_Runtime* this, s4 par1)
150 log_text("Java_java_lang_Runtime_traceMethodCalls called");
155 * Class: java_lang_Runtime
156 * Method: availableProcessors
159 JNIEXPORT s4 JNICALL Java_java_lang_Runtime_availableProcessors (JNIEnv *env , struct java_lang_Runtime* this ) {
160 log_text("Java_java_lang_Runtime_availableProcessors called, returning hardcoded 1");
166 * Class: java_lang_Runtime
168 * Signature: (Ljava/lang/String;)I
170 JNIEXPORT s4 JNICALL Java_java_lang_Runtime_nativeLoad (JNIEnv *env , struct java_lang_Runtime* this , struct java_lang_String*
178 data=javastring_toutf(par1,0);
181 log_text("nativeLoad: Error: empty string");
186 utf_strlen(data)+ 40;
189 buffer = MNEW(char, buffer_len);
191 strcpy(buffer, "Java_java_lang_Runtime_nativeLoad:");
192 utf_sprint(buffer+strlen(data), data);
195 MFREE(buffer, char, buffer_len);
197 log_text("Java_java_lang_Runtime_nativeLoad");
203 * Class: java_lang_Runtime
204 * Method: nativeGetLibname
205 * Signature: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
207 JNIEXPORT struct java_lang_String* JNICALL Java_java_lang_Runtime_nativeGetLibname (JNIEnv *env , jclass clazz, struct java_lang_String* par1,
208 struct java_lang_String* par2) {
214 data=javastring_toutf(par2,0);
217 log_text("nativeGetLibName: Error: empty string");
222 utf_strlen(data)+ 40;
224 buffer = MNEW(char, buffer_len);
226 strcpy(buffer, "Java_java_lang_Runtime_nativeGetLibname:");
227 utf_sprint(buffer+strlen(data), data);
230 MFREE(buffer, char, buffer_len);
232 log_text("Java_java_lang_Runtime_nativeGetLibname");
238 * Class: java_lang_Runtime
239 * Method: insertSystemProperties
240 * Signature: (Ljava/util/Properties;)V
242 JNIEXPORT void JNICALL Java_java_lang_Runtime_insertSystemProperties (JNIEnv *env , jclass clazz, struct java_util_Properties* p) {
244 #define BUFFERSIZE 200
247 char buffer[BUFFERSIZE];
248 struct utsname utsnamebuf;
250 log_text("Java_java_lang_Runtime_insertSystemProperties");
252 proplist[0][1] = classpath;
253 proplist[1][1] = getenv("JAVA_HOME");
254 proplist[2][1] = getenv("HOME");
255 proplist[3][1] = getenv("USER");
256 proplist[4][1] = getcwd(buffer, BUFFERSIZE);
258 /* get properties from system */
260 proplist[5][1] = utsnamebuf.machine;
261 proplist[6][1] = utsnamebuf.sysname;
262 proplist[7][1] = utsnamebuf.release;
264 if (!p) panic("Java_java_lang_Runtime_insertSystemProperties called with NULL-Argument");
266 /* search for method to add properties */
267 m = class_resolvemethod(
268 p->header.vftbl->class,
270 utf_new_char("(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;")
273 if (!m) panic("Can not find method 'put' for class Properties");
275 /* add the properties */
276 for (i = 0; i < activeprops; i++) {
278 if (proplist[i][1] == NULL) proplist[i][1] = "";
280 asm_calljavamethod(m,
282 javastring_new_char(proplist[i][0]),
283 javastring_new_char(proplist[i][1]),
293 * Class: java_lang_Runtime
297 JNIEXPORT s8 JNICALL Java_java_lang_Runtime_maxMemory (JNIEnv *env , struct java_lang_Runtime* this ) {
298 log_text("Java_java_lang_Runtime_maxMemory");
304 * These are local overrides for various environment variables in Emacs.
305 * Please do not remove this and leave it at the end of the file, where
306 * Emacs will automagically detect them.
307 * ---------------------------------------------------------------------
310 * indent-tabs-mode: t