CACAO
java_lang_System.cpp
Go to the documentation of this file.
1 /* src/native/vm/cldc1.1/java_lang_System.cpp
2 
3  Copyright (C) 2006-2013
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 
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(so).to_chars();
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::to_chars */
86 
87  MFREE(key, char, 0);
88 
89  if (value == NULL)
90  return NULL;
91 
92  result = JavaString::from_utf8(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 
128 {
129  Utf8String u = Utf8String::from_utf8("java/lang/System");
130 
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  */
Table containing all native methods registered with the VM.
Definition: native.hpp:132
NativeMethods & get_nativemethods()
Definition: vm.hpp:128
JNIEXPORT jint JNICALL Java_java_lang_System_identityHashCode(JNIEnv *env, jclass clazz, jobject obj)
void register_methods(Utf8String classname, const JNINativeMethod *methods, size_t count)
Register native methods with the VM.
Definition: native.cpp:242
JNIEXPORT void JNICALL Java_java_lang_System_arraycopy(JNIEnv *env, jclass clazz, jobject src, jint srcStart, jobject dest, jint destStart, jint len)
int32_t get_hashcode() const
_Jv_JNIEnv JNIEnv
Definition: jni.hpp:112
#define NATIVE_METHODS_COUNT
Definition: native.hpp:45
static JavaString from_utf8(Utf8String)
Definition: string.cpp:184
static JNINativeMethod methods[]
char * to_chars() const
Definition: string.cpp:413
java/lang/Object
void _Jv_java_lang_System_init(void)
Properties & get_properties()
Definition: vm.hpp:113
static Utf8String from_utf8(const char *, size_t)
Definition: utf8.cpp:335
void builtin_arraycopy(java_handle_t *src, s4 srcStart, java_handle_t *dest, s4 destStart, s4 len)
Definition: builtin.cpp:1946
JNIEXPORT jstring JNICALL Java_java_lang_System_getProperty0(JNIEnv *env, jclass clazz, jstring s)
#define MFREE(ptr, type, num)
Definition: memory.hpp:97
const char * get(const char *key)
Get a property entry from the internal property map.
Definition: properties.cpp:590
static VM * get_current()
Definition: vm.hpp:99