1 /* class: java/lang/System */
4 * Class: java/lang/System
5 * Method: currentTimeMillis
8 JNIEXPORT s8 JNICALL Java_java_lang_System_currentTimeMillis ( JNIEnv *env )
12 (void) gettimeofday(&tv, NULL);
13 return ((s8) tv.tv_sec) * 1000 + tv.tv_usec / 1000;
17 * Class: java/lang/System
19 * Signature: (Ljava/lang/Object;ILjava/lang/Object;II)V
21 JNIEXPORT void JNICALL Java_java_lang_System_arraycopy (JNIEnv *env, struct java_lang_Object* source, s4 sp, struct java_lang_Object* dest, s4 dp, s4 len)
24 java_arrayheader *s = (java_arrayheader*) source;
25 java_arrayheader *d = (java_arrayheader*) dest;
27 if (((s == NULL) | (d == NULL)) != 0) {
28 exceptionptr = proto_java_lang_NullPointerException;
32 if (s->objheader.vftbl->class != class_array) {
33 exceptionptr = proto_java_lang_ArrayStoreException;
37 if (((sp<0) | (sp+len > s->size) | (dp<0) | (dp+len > d->size)) != 0) {
38 exceptionptr = proto_java_lang_ArrayIndexOutOfBoundsException;
42 /* if (s->arraytype != d->arraytype) { */
43 /* exceptionptr = proto_java_lang_ArrayStoreException; */
47 switch (s->arraytype) {
49 if (s->objheader.vftbl != d->objheader.vftbl) {
50 exceptionptr = proto_java_lang_ArrayStoreException;
53 memmove(((java_bytearray*) d)->data + dp,
54 ((java_bytearray*) s)->data + sp,
57 case ARRAYTYPE_BOOLEAN:
58 if (s->objheader.vftbl != d->objheader.vftbl) {
59 exceptionptr = proto_java_lang_ArrayStoreException;
62 memmove(((java_booleanarray*) d)->data + dp,
63 ((java_booleanarray*) s)->data + sp,
67 if (s->objheader.vftbl != d->objheader.vftbl) {
68 exceptionptr = proto_java_lang_ArrayStoreException;
71 memmove(((java_chararray*) d)->data + dp,
72 ((java_chararray*) s)->data + sp,
73 (size_t) len * sizeof(u2));
76 if (s->objheader.vftbl != d->objheader.vftbl) {
77 exceptionptr = proto_java_lang_ArrayStoreException;
80 memmove(((java_shortarray*) d)->data + dp,
81 ((java_shortarray*) s)->data + sp,
82 (size_t) len * sizeof(s2));
85 if (s->objheader.vftbl != d->objheader.vftbl) {
86 exceptionptr = proto_java_lang_ArrayStoreException;
89 memmove(((java_intarray*) d)->data + dp,
90 ((java_intarray*) s)->data + sp,
91 (size_t) len * sizeof(s4));
94 if (s->objheader.vftbl != d->objheader.vftbl) {
95 exceptionptr = proto_java_lang_ArrayStoreException;
98 memmove(((java_longarray*) d)->data + dp,
99 ((java_longarray*) s)->data + sp,
100 (size_t) len * sizeof(s8));
102 case ARRAYTYPE_FLOAT:
103 if (s->objheader.vftbl != d->objheader.vftbl) {
104 exceptionptr = proto_java_lang_ArrayStoreException;
107 memmove(((java_floatarray*) d)->data + dp,
108 ((java_floatarray*) s)->data + sp,
109 (size_t) len * sizeof(float));
111 case ARRAYTYPE_DOUBLE:
112 if (s->objheader.vftbl != d->objheader.vftbl) {
113 exceptionptr = proto_java_lang_ArrayStoreException;
116 memmove(((java_doublearray*) d)->data + dp,
117 ((java_doublearray*) s)->data + sp,
118 (size_t) len * sizeof(double));
120 case ARRAYTYPE_OBJECT:
122 java_objectarray *oas = (java_objectarray*) s;
123 java_objectarray *oad = (java_objectarray*) d;
125 if (d->objheader.vftbl->class != class_array) {
126 exceptionptr = proto_java_lang_ArrayStoreException;
129 if (s->arraytype != d->arraytype) {
130 exceptionptr = proto_java_lang_ArrayStoreException;
135 for (i=0; i<len; i++) {
136 java_objectheader *o = oas->data[sp+i];
137 if (!builtin_canstore(oad, o)) {
138 exceptionptr = proto_java_lang_ArrayStoreException;
144 for (i=len-1; i>=0; i--) {
145 java_objectheader *o = oas->data[sp+i];
146 if (!builtin_canstore(oad, o)) {
147 exceptionptr = proto_java_lang_ArrayStoreException;
155 case ARRAYTYPE_ARRAY:
157 java_arrayarray *aas = (java_arrayarray*) s;
158 java_arrayarray *aad = (java_arrayarray*) d;
160 if (d->objheader.vftbl->class != class_array) {
161 exceptionptr = proto_java_lang_ArrayStoreException;
164 if (s->arraytype != d->arraytype) {
165 exceptionptr = proto_java_lang_ArrayStoreException;
170 for (i=0; i<len; i++) {
171 java_arrayheader *o = aas->data[sp+i];
172 if (!builtin_canstore( (java_objectarray*)aad,
173 (java_objectheader*)o )) {
174 exceptionptr = proto_java_lang_ArrayStoreException;
180 for (i=len-1; i>=0; i--) {
181 java_arrayheader *o = aas->data[sp+i];
182 if (!builtin_canstore( (java_objectarray*)aad,
183 (java_objectheader*)o )) {
184 exceptionptr = proto_java_lang_ArrayStoreException;
194 panic ("Unknown data type for arraycopy");
199 static int activeprops = 15;
201 static char *proplist[MAXPROPS][2] = {
202 { "java.class.path", NULL },
203 { "java.home", NULL },
204 { "user.home", NULL },
205 { "user.name", NULL },
206 { "user.dir", NULL },
210 { "os.version", NULL },
212 { "java.class.version", "45.3" },
213 { "java.version", PACKAGE":"VERSION },
214 { "java.vendor", "CACAO Team" },
215 { "java.vendor.url", "http://www.complang.tuwien.ac.at/java/cacao/" },
216 { "path.separator", ":" },
217 { "file.separator", "/" },
218 { "line.separator", "\n" }
221 void attach_property (char *name, char *value)
223 if (activeprops >= MAXPROPS) panic ("Too many properties defined");
224 proplist[activeprops][0] = name;
225 proplist[activeprops][1] = value;
230 * Class: java/lang/System
231 * Method: initProperties
232 * Signature: (Ljava/util/Properties;)Ljava/util/Properties;
234 JNIEXPORT struct java_util_Properties* JNICALL Java_java_lang_System_initProperties (JNIEnv *env,struct java_util_Properties* p)
236 #define BUFFERSIZE 200
239 char buffer[BUFFERSIZE];
240 java_objectheader *o;
241 struct utsname utsnamebuf;
243 proplist[0][1] = classpath;
244 proplist[1][1] = getenv("JAVA_HOME");
245 proplist[2][1] = getenv("HOME");
246 proplist[3][1] = getenv("USER");
247 proplist[4][1] = getcwd(buffer,BUFFERSIZE);
249 /* get properties from system */
251 proplist[5][1] = utsnamebuf.machine;
252 proplist[6][1] = utsnamebuf.sysname;
253 proplist[7][1] = utsnamebuf.release;
255 if (!p) panic ("initProperties called with NULL-Argument");
257 /* search for method to add properties */
258 m = class_resolvemethod (
259 p->header.vftbl->class,
260 utf_new_char ("put"),
261 utf_new_char ("(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;")
264 if (!m) panic ("Can not find method 'put' for class Properties");
266 /* add the properties */
267 for (i=0; i<activeprops; i++) {
269 if (proplist[i][1]==NULL) proplist[i][1]="";
271 asm_calljavamethod(m, p,
272 javastring_new_char(proplist[i][0]),
273 javastring_new_char(proplist[i][1]),
283 JNIEXPORT void JNICALL Java_java_lang_System_registerNatives (JNIEnv *env )
289 * Class: java/lang/System
291 * Signature: (Ljava/io/PrintStream;)V
293 JNIEXPORT void JNICALL Java_java_lang_System_setErr0 (JNIEnv *env , struct java_io_PrintStream* stream)
295 /* set static field 'err' of class java.lang.System */
298 env->GetStaticFieldID(env,class_java_lang_System,"err","Ljava/io/PrintStream;");
300 if (!fid) panic("unable to access static field of class System");
302 env->SetStaticObjectField(env,class_java_lang_System,fid,(jobject) stream);
306 * Class: java/lang/System
308 * Signature: (Ljava/io/InputStream;)V
310 JNIEXPORT void JNICALL Java_java_lang_System_setIn0 (JNIEnv *env , struct java_io_InputStream* stream)
312 /* set static field 'in' of class java.lang.System */
315 env->GetStaticFieldID(env,class_java_lang_System,"in","Ljava/io/InputStream;");
317 if (!fid) panic("unable to access static field of class System");
319 env->SetStaticObjectField(env,class_java_lang_System,fid,(jobject) stream);
323 * Class: java/lang/System
325 * Signature: (Ljava/io/PrintStream;)V
327 JNIEXPORT void JNICALL Java_java_lang_System_setOut0 (JNIEnv *env , struct java_io_PrintStream* stream)
329 /* set static field 'out' of class java.lang.System */
332 env->GetStaticFieldID(env,class_java_lang_System,"out","Ljava/io/PrintStream;");
334 if (!fid) panic("unable to access static field of class System");
336 env->SetStaticObjectField(env,class_java_lang_System,fid,(jobject) stream);
340 * Class: java/lang/System
341 * Method: mapLibraryName
342 * Signature: (Ljava/lang/String;)Ljava/lang/String;
344 JNIEXPORT struct java_lang_String* JNICALL Java_java_lang_System_mapLibraryName (JNIEnv *env , struct java_lang_String* s)
346 char somefile[MAXSTRINGSIZE];
349 /* return name of any file that exists (relative to root),
350 so ClassLoader believes we dynamically load the native library */
352 if (strlen(classpath)+24>MAXSTRINGSIZE)
353 panic("filename too long");
355 java_home = getenv("JAVA_HOME");
358 strcpy(somefile,java_home);
359 strcat(somefile,"/dummy");
361 return (java_lang_String* ) javastring_new_char(&somefile[1]);
367 * Class: java/lang/System
368 * Method: getCallerClass
369 * Signature: ()Ljava/lang/Class;
371 JNIEXPORT struct java_lang_Class* JNICALL Java_java_lang_System_getCallerClass (JNIEnv *env )
373 /* determine the callerclass by getting the method which called getCallerClass */
375 methodinfo *m = asm_getcallingmethod();
377 if (m && (c = m->class)) {
378 use_class_as_object (c);
379 return (java_lang_Class*) c;
382 /* caller class could not be determined */
387 * Class: java/lang/System
388 * Method: identityHashCode
389 * Signature: (Ljava/lang/Object;)I
391 JNIEXPORT s4 JNICALL Java_java_lang_System_identityHashCode (JNIEnv *env , struct java_lang_Object* par1)
393 return ((char*) par1) - ((char*) 0);