aboutsummaryrefslogtreecommitdiff
path: root/tests/nbody-java/native_java_lang_System.c
blob: 861781ca4a73a6d3401f264d068b9e43475c54f0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#include "xmlvm.h"
#include "java_lang_System.h"


//XMLVM_BEGIN_NATIVE_IMPLEMENTATION
#include <locale.h>
#include <sys/time.h>
#include "java_lang_String.h"

//From HARMONY/classlib/modules/luni/src/main/native/luni/shared/luniglob.c
#define CHARSETBUFF 64

//From HARMONY/classlib/modules/luni/src/main/native/luni/unix/helpers.c
void getOSCharset(char *locale, const size_t size) {
    char * codec = NULL;
    size_t cur = 0;
    short flag = 0;
    setlocale(LC_CTYPE, "");
    codec = setlocale(LC_CTYPE, NULL);
    // get codeset from language[_territory][.codeset][@modifier]
    while (*codec) {
        if (!flag) {
            if (*codec != '.') {
                codec++;
                continue;
            } else {
                flag = 1;
                codec++;
            }
        } else {
            if (*codec == '@') {
                break;
            } else {
                locale[cur++] = (*codec);
                codec++;
                if (cur >= size) {
                    // Not enough size
                    cur = 0;
                    break;
                }
            }
        }
    }
    locale[cur] = '\0';
    if (!strlen(locale)) {
        strcpy(locale, "8859_1");
    }
    return;
}

//XMLVM_END_NATIVE_IMPLEMENTATION

void java_lang_System_initNativeLayer__()
{
    //XMLVM_BEGIN_NATIVE[java_lang_System_initNativeLayer__]
    // Nothing to be done
    //XMLVM_END_NATIVE
}

JAVA_LONG java_lang_System_currentTimeMillis__()
{
    //XMLVM_BEGIN_NATIVE[java_lang_System_currentTimeMillis__]
    struct timeval now;
    gettimeofday(&now, NULL);

    JAVA_LONG msec = ((JAVA_LONG) now.tv_sec) * 1000;
    msec += now.tv_usec / 1000;

    return msec;
    //XMLVM_END_NATIVE
}

JAVA_LONG java_lang_System_nanoTime__()
{
    //XMLVM_BEGIN_NATIVE[java_lang_System_nanoTime__]
    //TODO implement
    return java_lang_System_nanoTime__() * 1000000L;
    //XMLVM_END_NATIVE
}

void java_lang_System_nativeExit___int(JAVA_INT n1)
{
    //XMLVM_BEGIN_NATIVE[java_lang_System_nativeExit___int]
    exit(n1);
    //XMLVM_END_NATIVE
}

JAVA_OBJECT java_lang_System_getPropertyList__()
{
    //XMLVM_BEGIN_NATIVE[java_lang_System_getPropertyList__]
    return XMLVMArray_createSingleDimension(__CLASS_java_lang_String, 0);
    //XMLVM_END_NATIVE
}

JAVA_OBJECT java_lang_System_getEncoding___int(JAVA_INT n1)
{
    //XMLVM_BEGIN_NATIVE[java_lang_System_getEncoding___int]
    //Get charset from the OS
#ifdef EMSCRIPTEN
	return xmlvm_create_java_string("UTF-8");
#else
    char charset[CHARSETBUFF];
    getOSCharset(charset, CHARSETBUFF);
    return xmlvm_create_java_string(charset);
#endif
    //XMLVM_END_NATIVE
}

JAVA_INT java_lang_System_identityHashCode___java_lang_Object(JAVA_OBJECT n1)
{
    //XMLVM_BEGIN_NATIVE[java_lang_System_identityHashCode___java_lang_Object]
    return (JAVA_INT) n1;
    //XMLVM_END_NATIVE
}