1 /* class: java/lang/Runtime */
7 #include <sys/utsname.h>
15 #include "toolbox/loging.h"
16 #include "toolbox/memory.h"
17 #include "java_io_File.h"
18 #include "java_lang_String.h"
19 #include "java_util_Properties.h" /* needed for java_lang_Runtime.h */
20 #include "java_lang_Runtime.h"
27 static int activeprops = 19;
29 static char *proplist[MAXPROPS][2] = {
30 { "java.class.path", NULL },
31 { "java.home", NULL },
32 { "user.home", NULL },
33 { "user.name", NULL },
38 { "os.version", NULL },
40 { "java.class.version", "45.3" },
41 { "java.version", PACKAGE":"VERSION },
42 { "java.vendor", "CACAO Team" },
43 { "java.vendor.url", "http://www.complang.tuwien.ac.at/java/cacao/" },
44 { "java.vm.name", "CACAO"},
45 { "java.tmpdir", "/tmp/"},
46 { "java.io.tmpdir", "/tmp/"},
48 { "path.separator", ":" },
49 { "file.separator", "/" },
50 { "line.separator", "\n" },
51 { "java.protocol.handler.pkgs", "gnu.java.net.protocol"}
56 * Class: java_lang_Runtime
57 * Method: execInternal
58 * Signature: ([Ljava/lang/String;[Ljava/lang/String;Ljava/io/File;)Ljava/lang/Process;
60 JNIEXPORT struct java_lang_Process* JNICALL Java_java_lang_Runtime_execInternal (JNIEnv *env , struct java_lang_Runtime* this ,
61 java_objectarray* cmd, java_objectarray* shellenv, struct java_io_File* workingdir)
63 log_text("Java_java_lang_Runtime_execInternal called");
69 * Class: java/lang/Runtime
70 * Method: exitInternal
73 JNIEXPORT void JNICALL Java_java_lang_Runtime_exitInternal ( JNIEnv *env , struct java_lang_Runtime* this, s4 par1)
75 cacao_shutdown (par1);
80 * Class: java/lang/Runtime
84 JNIEXPORT s8 JNICALL Java_java_lang_Runtime_freeMemory ( JNIEnv *env , struct java_lang_Runtime* this)
86 log_text ("java_lang_Runtime_freeMemory called");
87 return builtin_i2l (0);
92 * Class: java/lang/Runtime
96 JNIEXPORT void JNICALL Java_java_lang_Runtime_gc ( JNIEnv *env , struct java_lang_Runtime* this)
103 * Class: java/lang/Runtime
104 * Method: runFinalization
107 JNIEXPORT void JNICALL Java_java_lang_Runtime_runFinalization ( JNIEnv *env, struct java_lang_Runtime* this)
109 log_text("Java_java_lang_Runtime_runFinalization0 called");
114 * Class: java/lang/Runtime
115 * Method: runFinalizersOnExit
118 JNIEXPORT void JNICALL Java_java_lang_Runtime_runFinalizersOnExitInternal ( JNIEnv *env , jclass clazz, s4 par1)
120 log_text("Java_java_lang_Runtime_runFinalizersOnExit0 called");
125 * Class: java/lang/Runtime
126 * Method: totalMemory
129 JNIEXPORT s8 JNICALL Java_java_lang_Runtime_totalMemory ( JNIEnv *env , struct java_lang_Runtime* this)
131 log_text ("java_lang_Runtime_totalMemory called");
132 return builtin_i2l (0);
137 * Class: java/lang/Runtime
138 * Method: traceInstructions
141 JNIEXPORT void JNICALL Java_java_lang_Runtime_traceInstructions ( JNIEnv *env , struct java_lang_Runtime* this, s4 par1)
143 log_text("Java_java_lang_Runtime_traceInstructions called");
148 * Class: java/lang/Runtime
149 * Method: traceMethodCalls
152 JNIEXPORT void JNICALL Java_java_lang_Runtime_traceMethodCalls ( JNIEnv *env , struct java_lang_Runtime* this, s4 par1)
154 log_text("Java_java_lang_Runtime_traceMethodCalls called");
159 * Class: java_lang_Runtime
160 * Method: availableProcessors
163 JNIEXPORT s4 JNICALL Java_java_lang_Runtime_availableProcessors (JNIEnv *env , struct java_lang_Runtime* this ) {
164 log_text("Java_java_lang_Runtime_availableProcessors called, returning hardcoded 1");
170 * Class: java_lang_Runtime
172 * Signature: (Ljava/lang/String;)I
174 JNIEXPORT s4 JNICALL Java_java_lang_Runtime_nativeLoad (JNIEnv *env , struct java_lang_Runtime* this , struct java_lang_String*
182 data=javastring_toutf(par1,0);
185 log_text("nativeLoad: Error: empty string");
190 utf_strlen(data)+ 40;
193 buffer = MNEW(char, buffer_len);
195 strcpy(buffer, "Java_java_lang_Runtime_nativeLoad:");
196 utf_sprint(buffer+strlen(data), data);
199 MFREE(buffer, char, buffer_len);
201 log_text("Java_java_lang_Runtime_nativeLoad");
207 * Class: java_lang_Runtime
208 * Method: nativeGetLibname
209 * Signature: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
211 JNIEXPORT struct java_lang_String* JNICALL Java_java_lang_Runtime_nativeGetLibname (JNIEnv *env , jclass clazz, struct java_lang_String* par1,
212 struct java_lang_String* par2) {
218 data=javastring_toutf(par2,0);
221 log_text("nativeGetLibName: Error: empty string");
226 utf_strlen(data)+ 40;
228 buffer = MNEW(char, buffer_len);
230 strcpy(buffer, "Java_java_lang_Runtime_nativeGetLibname:");
231 utf_sprint(buffer+strlen(data), data);
234 MFREE(buffer, char, buffer_len);
236 log_text("Java_java_lang_Runtime_nativeGetLibname");
242 * Class: java_lang_Runtime
243 * Method: insertSystemProperties
244 * Signature: (Ljava/util/Properties;)V
246 JNIEXPORT void JNICALL Java_java_lang_Runtime_insertSystemProperties (JNIEnv *env , jclass clazz, struct java_util_Properties* p) {
248 #define BUFFERSIZE 200
251 char buffer[BUFFERSIZE];
252 struct utsname utsnamebuf;
254 log_text("Java_java_lang_Runtime_insertSystemProperties");
256 proplist[0][1] = classpath;
257 proplist[1][1] = getenv("JAVA_HOME");
258 proplist[2][1] = getenv("HOME");
259 proplist[3][1] = getenv("USER");
260 proplist[4][1] = getcwd(buffer, BUFFERSIZE);
262 /* get properties from system */
264 proplist[5][1] = utsnamebuf.machine;
265 proplist[6][1] = utsnamebuf.sysname;
266 proplist[7][1] = utsnamebuf.release;
268 if (!p) panic("Java_java_lang_Runtime_insertSystemProperties called with NULL-Argument");
270 /* search for method to add properties */
271 m = class_resolvemethod(
272 p->header.vftbl->class,
274 utf_new_char("(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;")
277 if (!m) panic("Can not find method 'put' for class Properties");
279 /* add the properties */
280 for (i = 0; i < activeprops; i++) {
282 if (proplist[i][1] == NULL) proplist[i][1] = "";
284 asm_calljavafunction(m,
286 javastring_new_char(proplist[i][0]),
287 javastring_new_char(proplist[i][1]),
297 * Class: java_lang_Runtime
301 JNIEXPORT s8 JNICALL Java_java_lang_Runtime_maxMemory (JNIEnv *env , struct java_lang_Runtime* this ) {
302 log_text("Java_java_lang_Runtime_maxMemory");
308 * These are local overrides for various environment variables in Emacs.
309 * Please do not remove this and leave it at the end of the file, where
310 * Emacs will automagically detect them.
311 * ---------------------------------------------------------------------
314 * indent-tabs-mode: t