55 #define DEBUG_NAME "properties"
65 char *boot_class_path;
67 #if defined(ENABLE_JAVASE)
69 # if defined(WITH_JAVA_RUNTIME_LIBRARY_GNU_CLASSPATH)
70 struct utsname *utsnamebuf;
74 #if defined(ENABLE_JRE_LAYOUT)
95 # if defined(WITH_JAVA_RUNTIME_LIBRARY_GNU_CLASSPATH)
99 char* java_home = strdup(p);
103 len = strlen(java_home) + strlen(
"/lib/classpath") + strlen(
"0");
105 char* boot_library_path =
MNEW(
char, len);
107 strcpy(boot_library_path, java_home);
108 strcat(boot_library_path,
"/lib/classpath");
110 # elif defined(WITH_JAVA_RUNTIME_LIBRARY_OPENJDK)
120 strlen(
"/jre/lib/" JAVA_ARCH
"/server/libjvm.so") +
123 char* java_home =
MNEW(
char, len);
125 strcpy(java_home, p);
126 strcat(java_home,
"/jre/lib/" JAVA_ARCH
"/server/libjvm.so");
131 strcpy(java_home, p);
132 strcat(java_home,
"/jre");
136 strcpy(java_home, p);
141 len = strlen(java_home) + strlen(
"/lib/" JAVA_ARCH) + strlen(
"0");
143 char* boot_library_path =
MNEW(
char, len);
145 strcpy(boot_library_path, java_home);
146 strcat(boot_library_path,
"/lib/" JAVA_ARCH);
149 # error unknown classpath configuration
157 const char* java_home = CACAO_PREFIX;
159 # if defined(WITH_JAVA_RUNTIME_LIBRARY_GNU_CLASSPATH)
161 const char* boot_library_path = JAVA_RUNTIME_LIBRARY_LIBDIR
"/classpath";
163 # elif defined(WITH_JAVA_RUNTIME_LIBRARY_OPENJDK)
165 const char* boot_library_path = JAVA_RUNTIME_LIBRARY_LIBDIR;
167 # elif defined(WITH_JAVA_RUNTIME_LIBRARY_CLDC1_1)
172 # error unknown classpath configuration
176 put(
"java.home", java_home);
183 boot_class_path =
MNEW(
char, strlen(p) + strlen(
"0"));
184 strcpy(boot_class_path, p);
187 #if defined(ENABLE_JRE_LAYOUT)
188 # if defined(WITH_JAVA_RUNTIME_LIBRARY_GNU_CLASSPATH)
191 strlen(java_home) + strlen(
"/share/cacao/vm.zip:") +
192 strlen(java_home) + strlen(
"/share/classpath/glibj.zip") +
195 boot_class_path =
MNEW(
char, len);
197 strcpy(boot_class_path, java_home);
198 strcat(boot_class_path,
"/share/cacao/vm.zip");
199 strcat(boot_class_path,
":");
200 strcat(boot_class_path, java_home);
201 strcat(boot_class_path,
"/share/classpath/glibj.zip");
203 # elif defined(WITH_JAVA_RUNTIME_LIBRARY_OPENJDK)
210 strlen(java_home) + strlen(
"/lib/resources.jar:") +
211 strlen(java_home) + strlen(
"/lib/rt.jar:") +
212 strlen(java_home) + strlen(
"/lib/sunrsasign.jar:") +
213 strlen(java_home) + strlen(
"/lib/jsse.jar:") +
214 strlen(java_home) + strlen(
"/lib/jce.jar:") +
215 strlen(java_home) + strlen(
"/lib/charsets.jar:") +
216 strlen(java_home) + strlen(
"/classes") +
219 boot_class_path =
MNEW(
char, len);
221 strcpy(boot_class_path, java_home);
222 strcat(boot_class_path,
"/lib/resources.jar:");
223 strcat(boot_class_path, java_home);
224 strcat(boot_class_path,
"/lib/rt.jar:");
225 strcat(boot_class_path, java_home);
226 strcat(boot_class_path,
"/lib/sunrsasign.jar:");
227 strcat(boot_class_path, java_home);
228 strcat(boot_class_path,
"/lib/jsse.jar:");
229 strcat(boot_class_path, java_home);
230 strcat(boot_class_path,
"/lib/jce.jar:");
231 strcat(boot_class_path, java_home);
232 strcat(boot_class_path,
"/lib/charsets.jar:");
233 strcat(boot_class_path, java_home);
234 strcat(boot_class_path,
"/classes");
237 # error unknown classpath configuration
240 # if defined(WITH_JAVA_RUNTIME_LIBRARY_GNU_CLASSPATH)
243 strlen(CACAO_VM_ZIP) +
245 strlen(JAVA_RUNTIME_LIBRARY_CLASSES) +
248 boot_class_path =
MNEW(
char, len);
250 strcpy(boot_class_path, CACAO_VM_ZIP);
251 strcat(boot_class_path,
":");
252 strcat(boot_class_path, JAVA_RUNTIME_LIBRARY_CLASSES);
254 # elif defined(WITH_JAVA_RUNTIME_LIBRARY_OPENJDK)
261 strlen(JAVA_RUNTIME_LIBRARY_PREFIX
"/lib/resources.jar:") +
262 strlen(JAVA_RUNTIME_LIBRARY_PREFIX
"/lib/rt.jar:") +
263 strlen(JAVA_RUNTIME_LIBRARY_PREFIX
"/lib/sunrsasign.jar:") +
264 strlen(JAVA_RUNTIME_LIBRARY_PREFIX
"/lib/jsse.jar:") +
265 strlen(JAVA_RUNTIME_LIBRARY_PREFIX
"/lib/jce.jar:") +
266 strlen(JAVA_RUNTIME_LIBRARY_PREFIX
"/lib/charsets.jar:") +
267 strlen(JAVA_RUNTIME_LIBRARY_PREFIX
"/classes") +
270 boot_class_path =
MNEW(
char, len);
272 strcpy(boot_class_path, JAVA_RUNTIME_LIBRARY_PREFIX
"/lib/resources.jar:");
273 strcat(boot_class_path, JAVA_RUNTIME_LIBRARY_PREFIX
"/lib/rt.jar:");
274 strcat(boot_class_path, JAVA_RUNTIME_LIBRARY_PREFIX
"/lib/sunrsasign.jar:");
275 strcat(boot_class_path, JAVA_RUNTIME_LIBRARY_PREFIX
"/lib/jsse.jar:");
276 strcat(boot_class_path, JAVA_RUNTIME_LIBRARY_PREFIX
"/lib/jce.jar:");
277 strcat(boot_class_path, JAVA_RUNTIME_LIBRARY_PREFIX
"/lib/charsets.jar:");
278 strcat(boot_class_path, JAVA_RUNTIME_LIBRARY_PREFIX
"/classes");
280 # elif defined(WITH_JAVA_RUNTIME_LIBRARY_CLDC1_1)
283 strlen(JAVA_RUNTIME_LIBRARY_CLASSES) +
286 boot_class_path =
MNEW(
char, len);
288 strcpy(boot_class_path, JAVA_RUNTIME_LIBRARY_CLASSES);
291 # error unknown classpath configuration
296 put(
"sun.boot.class.path", boot_class_path);
297 put(
"java.boot.class.path", boot_class_path);
299 #if defined(ENABLE_JAVASE)
308 class_path =
MNEW(
char, strlen(p) + strlen(
"0"));
309 strcpy(class_path, p);
312 class_path =
MNEW(
char, strlen(
".") + strlen(
"0"));
313 strcpy(class_path,
".");
316 put(
"java.class.path", class_path);
319 put(
"java.vm.specification.version",
"1.0");
320 put(
"java.vm.specification.vendor",
"Sun Microsystems Inc.");
321 put(
"java.vm.specification.name",
"Java Virtual Machine Specification");
322 put(
"java.vm.version", VERSION_FULL);
323 put(
"java.vm.vendor",
"CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO");
324 put(
"java.vm.name",
"CACAO");
326 # if defined(ENABLE_INTRP)
330 put(
"java.vm.info",
"interpreted mode");
337 put(
"java.vm.info",
"compiled mode");
341 const char* java_library_path =
os::getenv(
"LD_LIBRARY_PATH");
343 if (java_library_path == NULL)
344 java_library_path =
"";
346 put(
"java.library.path", java_library_path);
348 # if defined(WITH_JAVA_RUNTIME_LIBRARY_GNU_CLASSPATH)
358 utsnamebuf =
NEW(
struct utsname);
362 put(
"java.runtime.version", VERSION_FULL);
363 put(
"java.runtime.name",
"CACAO");
365 put(
"java.specification.version",
"1.5");
366 put(
"java.specification.vendor",
"Sun Microsystems Inc.");
367 put(
"java.specification.name",
"Java Platform API Specification");
370 put(
"java.vendor",
"GNU Classpath");
371 put(
"java.vendor.url",
"http://www.gnu.org/software/classpath/");
375 put(
"gnu.classpath.boot.library.path", boot_library_path);
377 put(
"java.io.tmpdir",
"/tmp");
379 # if defined(ENABLE_INTRP)
381 put(
"gnu.java.compiler.name",
"cacao.intrp");
386 put(
"gnu.java.compiler.name",
"cacao.jit");
391 len = strlen(java_home) + strlen(
"/jre/lib/ext") + strlen(
"0");
393 char* extdirs =
MNEW(
char, len);
395 sprintf(extdirs,
"%s/jre/lib/ext", java_home);
397 put(
"java.ext.dirs", extdirs);
401 len = strlen(java_home) + strlen(
"/jre/lib/endorsed") + strlen(
"0");
403 char* endorseddirs =
MNEW(
char, len);
405 sprintf(endorseddirs,
"%s/jre/lib/endorsed", java_home);
407 put(
"java.endorsed.dirs", endorseddirs);
409 # if defined(DISABLE_GC)
416 put(
"os.arch",
"unknown");
417 put(
"os.name",
"unknown");
418 put(
"os.version",
"unknown");
420 put(
"os.arch", JAVA_ARCH);
421 put(
"os.name", utsnamebuf->sysname);
422 put(
"os.version", utsnamebuf->release);
425 # if WORDS_BIGENDIAN == 1
426 put(
"gnu.cpu.endian",
"big");
428 put(
"gnu.cpu.endian",
"little");
431 put(
"file.separator",
"/");
432 put(
"path.separator",
":");
433 put(
"line.separator",
"\n");
435 put(
"user.name", env_user ? env_user :
"null");
436 put(
"user.home", env_home ? env_home :
"null");
437 put(
"user.dir", cwd ? cwd :
"null");
441 bool use_en_US =
true;
442 if (env_lang != NULL) {
443 #if defined(HAVE_SETLOCALE) && defined(HAVE_LC_MESSAGES)
447 if ((locale = setlocale(LC_MESSAGES,
""))) {
448 int len = strlen(locale);
449 if (((len >= 5) && (locale[2] ==
'_')) || len == 2) {
451 char* lang =
MNEW(
char, 3);
452 strncpy(lang, (
char*) &locale[0], 2);
454 put(
"user.language", lang);
457 char* country =
MNEW(
char, 3);
458 strncpy(country, (
char*) &locale[3], 2);
461 put(
"user.country", country);
470 put(
"user.language",
"en");
471 put(
"user.country",
"US");
474 # elif defined(WITH_JAVA_RUNTIME_LIBRARY_OPENJDK)
479 put(
"sun.boot.library.path", boot_library_path);
483 strlen(java_home) + strlen(
"/lib/ext") +
485 strlen(
"/usr/java/packages/lib/ext") +
488 char* extdirs =
MNEW(
char, len);
490 sprintf(extdirs,
"%s/lib/ext:/usr/java/packages/lib/ext", java_home);
492 put(
"java.ext.dirs", extdirs);
495 len = strlen(java_home) + strlen(
"/lib/endorsed") + strlen(
"0");
497 char* endorseddirs =
MNEW(
char, len);
499 sprintf(endorseddirs,
"%s/lib/endorsed", java_home);
501 put(
"java.endorsed.dirs", endorseddirs);
505 # error unknown classpath configuration
509 #elif defined(ENABLE_JAVAME_CLDC1_1)
511 put(
"microedition.configuration",
"CLDC-1.1");
512 put(
"microedition.platform",
"generic");
513 put(
"microedition.encoding",
"ISO8859_1");
514 put(
"microedition.profiles",
"");
518 # error unknown Java configuration
564 std::map<const char*, const char*>::iterator it =
_properties.find(key);
568 LOG(
"[Properties::put: " <<
"key=" << key <<
", old value="<< it->second <<
", new value=" << value <<
"]" <<
cacao::nl);
577 LOG(
"[Properties::put: " <<
"key=" << key <<
", value=" << value <<
"]" <<
cacao::nl);
593 std::map<const char*, const char*>::iterator it =
_properties.find(key);
610 #if defined(ENABLE_JAVASE)
627 for (std::map<const char*, const char*>::iterator it =
_properties.begin(); it !=
_properties.end(); it++) {
644 for (std::map<const char*, const char*>::iterator it =
_properties.begin(); it !=
_properties.end(); it++) {
645 log_println(
"[Properties::dump: key=%s, value=%s]", it->first, it->second);
methodinfo * class_resolveclassmethod(classinfo *c, Utf8String name, Utf8String desc, classinfo *referer, bool throwexception)
static void abort_errno(const char *text,...)
Equal to abort_errnum, but uses errno to get the error number.
static char * getenv(const char *name)
static JavaString from_utf8(Utf8String)
typedef void(JNICALL *jvmtiEventSingleStep)(jvmtiEnv *jvmti_env
java_handle_t * vm_call_method(methodinfo *m, java_handle_t *o,...)
void log_println(const char *text,...)
#define LLNI_class_get(obj, variable)
static ssize_t readlink(const char *path, char *buf, size_t bufsiz)
static char * getcwd(void)
Return the current working directory.
static Utf8String from_utf8(const char *, size_t)
void fill(java_handle_t *p)
Fill the given Java system properties with all properties from the internal properties map...
#define LOG(STMT)
Analogous to DEBUG.
std::map< const char *, const char *, ltstr > _properties
static int access(const char *pathname, int mode)
Properties()
Constructor fills the properties list with default values.
#define MFREE(ptr, type, num)
static void put(java_handle_t *p, const char *key, const char *value)
Add the given property to the given Java system properties.
const char * get(const char *key)
Get a property entry from the internal property map.
void dump()
Dump all property entries.