Merged branch subtype-trunk into default.
[cacao.git] / src / native / vm / cldc1.1 / java_lang_System.cpp
1 /* src/native/vm/cldc1.1/java_lang_System.cpp
2
3    Copyright (C) 2006, 2007, 2008
4    CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO
5
6    This file is part of CACAO.
7
8    This program is free software; you can redistribute it and/or
9    modify it under the terms of the GNU General Public License as
10    published by the Free Software Foundation; either version 2, or (at
11    your option) any later version.
12
13    This program is distributed in the hope that it will be useful, but
14    WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16    General Public License for more details.
17
18    You should have received a copy of the GNU General Public License
19    along with this program; if not, write to the Free Software
20    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21    02110-1301, USA.
22
23 */
24
25
26 #include "config.h"
27
28 #include <stdint.h>
29 #include <stdlib.h>
30
31 #include "mm/memory.hpp"
32
33 #include "native/jni.hpp"
34 #include "native/native.hpp"
35
36 #if defined(ENABLE_JNI_HEADERS)
37 # include "native/include/java_lang_System.h"
38 #endif
39
40 #include "vm/jit/builtin.hpp"
41 #include "vm/javaobjects.hpp"
42 #include "vm/properties.hpp"
43 #include "vm/string.hpp"
44 #include "vm/vm.hpp"
45
46
47 // Native functions are exported as C functions.
48 extern "C" {
49
50 /*
51  * Class:     java/lang/System
52  * Method:    arraycopy
53  * Signature: (Ljava/lang/Object;ILjava/lang/Object;II)V
54  */
55 JNIEXPORT void JNICALL Java_java_lang_System_arraycopy(JNIEnv *env, jclass clazz, jobject src, jint srcStart, jobject dest, jint destStart, jint len)
56 {
57         builtin_arraycopy((java_handle_t *) src, srcStart,
58                                           (java_handle_t *) dest, destStart, len);
59 }
60
61
62 /*
63  * Class:     java/lang/System
64  * Method:    getProperty0
65  * Signature: (Ljava/lang/String;)Ljava/lang/String;
66  */
67
68 JNIEXPORT jstring JNICALL Java_java_lang_System_getProperty0(JNIEnv *env, jclass clazz, jstring s)
69 {
70         java_handle_t *so;
71         char*          key;
72         const char*    value;
73         java_handle_t *result;
74
75         so = (java_handle_t *) s;
76
77         /* build an ASCII string out of the java/lang/String passed */
78
79         key = javastring_tochar(so);
80
81         /* get the property from the internal table */
82
83         value = VM::get_current()->get_properties().get(key);
84
85         /* release the memory allocated in javastring_tochar */
86
87         MFREE(key, char, 0);
88
89         if (value == NULL)
90                 return NULL;
91
92         result = javastring_new_from_ascii(value);
93
94         return (jstring) result;
95 }
96
97 /*
98  * Class:     java/lang/System
99  * Method:    identityHashCode
100  * Signature: (Ljava/lang/Object;)I
101  */
102 JNIEXPORT jint JNICALL Java_java_lang_System_identityHashCode(JNIEnv *env, jclass clazz, jobject obj)
103 {
104         java_lang_Object o(obj);
105
106         return o.get_hashcode();
107 }
108
109 } // extern "C"
110
111
112 /* native methods implemented by this file ************************************/
113  
114 static JNINativeMethod methods[] = {
115         { (char*) "arraycopy",    (char*) "(Ljava/lang/Object;ILjava/lang/Object;II)V", (void*) (uintptr_t) &Java_java_lang_System_arraycopy    },
116         { (char*) "getProperty0", (char*) "(Ljava/lang/String;)Ljava/lang/String;",     (void*) (uintptr_t) &Java_java_lang_System_getProperty0 },
117         { (char*) "identityHashCode", (char*) "(Ljava/lang/Object;)I",                  (void*) (uintptr_t) &Java_java_lang_System_identityHashCode }
118 };
119
120
121 /* _Jv_java_lang_System_init ***************************************************
122  
123    Register native functions.
124  
125 *******************************************************************************/
126  
127 void _Jv_java_lang_System_init(void)
128 {
129         utf* u = utf_new_char("java/lang/System");
130  
131         NativeMethods& nm = VM::get_current()->get_nativemethods();
132         nm.register_methods(u, methods, NATIVE_METHODS_COUNT);
133 }
134
135
136 /*
137  * These are local overrides for various environment variables in Emacs.
138  * Please do not remove this and leave it at the end of the file, where
139  * Emacs will automagically detect them.
140  * ---------------------------------------------------------------------
141  * Local variables:
142  * mode: c++
143  * indent-tabs-mode: t
144  * c-basic-offset: 4
145  * tab-width: 4
146  * End:
147  */