1 
2 #include "xmlvm.h"
3 #include "java_lang_System.h"
4 
5 
6 //XMLVM_BEGIN_NATIVE_IMPLEMENTATION
7 #include <locale.h>
8 #include <sys/time.h>
9 #include "java_lang_String.h"
10 
11 //From HARMONY/classlib/modules/luni/src/main/native/luni/shared/luniglob.c
12 #define CHARSETBUFF 64
13 
14 //From HARMONY/classlib/modules/luni/src/main/native/luni/unix/helpers.c
getOSCharset(char * locale,const size_t size)15 void getOSCharset(char *locale, const size_t size) {
16     char * codec = NULL;
17     size_t cur = 0;
18     short flag = 0;
19     setlocale(LC_CTYPE, "");
20     codec = setlocale(LC_CTYPE, NULL);
21     // get codeset from language[_territory][.codeset][@modifier]
22     while (*codec) {
23         if (!flag) {
24             if (*codec != '.') {
25                 codec++;
26                 continue;
27             } else {
28                 flag = 1;
29                 codec++;
30             }
31         } else {
32             if (*codec == '@') {
33                 break;
34             } else {
35                 locale[cur++] = (*codec);
36                 codec++;
37                 if (cur >= size) {
38                     // Not enough size
39                     cur = 0;
40                     break;
41                 }
42             }
43         }
44     }
45     locale[cur] = '\0';
46     if (!strlen(locale)) {
47         strcpy(locale, "8859_1");
48     }
49     return;
50 }
51 
52 //XMLVM_END_NATIVE_IMPLEMENTATION
53 
java_lang_System_initNativeLayer__()54 void java_lang_System_initNativeLayer__()
55 {
56     //XMLVM_BEGIN_NATIVE[java_lang_System_initNativeLayer__]
57     // Nothing to be done
58     //XMLVM_END_NATIVE
59 }
60 
java_lang_System_currentTimeMillis__()61 JAVA_LONG java_lang_System_currentTimeMillis__()
62 {
63     //XMLVM_BEGIN_NATIVE[java_lang_System_currentTimeMillis__]
64     struct timeval now;
65     gettimeofday(&now, NULL);
66 
67     JAVA_LONG msec = ((JAVA_LONG) now.tv_sec) * 1000;
68     msec += now.tv_usec / 1000;
69 
70     return msec;
71     //XMLVM_END_NATIVE
72 }
73 
java_lang_System_nanoTime__()74 JAVA_LONG java_lang_System_nanoTime__()
75 {
76     //XMLVM_BEGIN_NATIVE[java_lang_System_nanoTime__]
77     //TODO implement
78     return java_lang_System_nanoTime__() * 1000000L;
79     //XMLVM_END_NATIVE
80 }
81 
java_lang_System_nativeExit___int(JAVA_INT n1)82 void java_lang_System_nativeExit___int(JAVA_INT n1)
83 {
84     //XMLVM_BEGIN_NATIVE[java_lang_System_nativeExit___int]
85     exit(n1);
86     //XMLVM_END_NATIVE
87 }
88 
java_lang_System_getPropertyList__()89 JAVA_OBJECT java_lang_System_getPropertyList__()
90 {
91     //XMLVM_BEGIN_NATIVE[java_lang_System_getPropertyList__]
92     return XMLVMArray_createSingleDimension(__CLASS_java_lang_String, 0);
93     //XMLVM_END_NATIVE
94 }
95 
java_lang_System_getEncoding___int(JAVA_INT n1)96 JAVA_OBJECT java_lang_System_getEncoding___int(JAVA_INT n1)
97 {
98     //XMLVM_BEGIN_NATIVE[java_lang_System_getEncoding___int]
99     //Get charset from the OS
100 #ifdef __EMSCRIPTEN__
101 	return xmlvm_create_java_string("UTF-8");
102 #else
103     char charset[CHARSETBUFF];
104     getOSCharset(charset, CHARSETBUFF);
105     return xmlvm_create_java_string(charset);
106 #endif
107     //XMLVM_END_NATIVE
108 }
109 
java_lang_System_identityHashCode___java_lang_Object(JAVA_OBJECT n1)110 JAVA_INT java_lang_System_identityHashCode___java_lang_Object(JAVA_OBJECT n1)
111 {
112     //XMLVM_BEGIN_NATIVE[java_lang_System_identityHashCode___java_lang_Object]
113     return (JAVA_INT) n1;
114     //XMLVM_END_NATIVE
115 }
116 
117