src/os/bsd/vm/os_bsd.cpp
Print this page
rev 6139 : 8038201: Clean up misleading usage of malloc() in init_system_properties_values()
Summary: Add missing freeing of memory or use local variable. Also add a 'const' to avoid gcc write-string warnings on ppc.
@@ -304,13 +304,10 @@
return home_dir;
}
#endif
void os::init_system_properties_values() {
-// char arch[12];
-// sysinfo(SI_ARCHITECTURE, arch, sizeof(arch));
-
// The next steps are taken in the product version:
//
// Obtain the JAVA_HOME value from the location of libjvm.so.
// This library should be located at:
// <JAVA_HOME>/jre/lib/<arch>/{client|server}/libjvm.so.
@@ -333,14 +330,10 @@
// Otherwise exit.
//
// Important note: if the location of libjvm.so changes this
// code needs to be changed accordingly.
- // The next few definitions allow the code to be verbatim:
-#define malloc(n) (char*)NEW_C_HEAP_ARRAY(char, (n), mtInternal)
-#define getenv(n) ::getenv(n)
-
/*
* See ld(1):
* The linker uses the following search paths to locate required
* shared libraries:
* 1: ...
@@ -362,52 +355,43 @@
// the null in SYS_EXTENSIONS_DIRS counts for the size of the colon after user_home_dir
int system_ext_size = strlen(user_home_dir) + sizeof(SYS_EXTENSIONS_DIR) +
sizeof(SYS_EXTENSIONS_DIRS);
#endif
- {
/* sysclasspath, java_home, dll_dir */
{
- char *home_path;
- char *dll_path;
char *pslash;
char buf[MAXPATHLEN];
os::jvm_path(buf, sizeof(buf));
// Found the full path to libjvm.so.
// Now cut the path to <java_home>/jre if we can.
*(strrchr(buf, '/')) = '\0'; /* get rid of /libjvm.so */
pslash = strrchr(buf, '/');
- if (pslash != NULL)
+ if (pslash != NULL) {
*pslash = '\0'; /* get rid of /{client|server|hotspot} */
- dll_path = malloc(strlen(buf) + 1);
- if (dll_path == NULL)
- return;
- strcpy(dll_path, buf);
- Arguments::set_dll_dir(dll_path);
+ }
+ Arguments::set_dll_dir(buf);
if (pslash != NULL) {
pslash = strrchr(buf, '/');
if (pslash != NULL) {
*pslash = '\0'; /* get rid of /<arch> (/lib on macosx) */
#ifndef __APPLE__
pslash = strrchr(buf, '/');
- if (pslash != NULL)
+ if (pslash != NULL) {
*pslash = '\0'; /* get rid of /lib */
+ }
#endif
}
}
+ Arguments::set_java_home(buf);
- home_path = malloc(strlen(buf) + 1);
- if (home_path == NULL)
- return;
- strcpy(home_path, buf);
- Arguments::set_java_home(home_path);
-
- if (!set_boot_path('/', ':'))
+ if (!set_boot_path('/', ':')) {
return;
}
+ }
/*
* Where to look for native libraries
*
* Note: Due to a legacy implementation, most of the library path
@@ -427,44 +411,45 @@
* space for the colon and the trailing null are provided by the
* nulls included by the sizeof operator (so actually we allocate
* a byte more than necessary).
*/
#ifdef __APPLE__
- ld_library_path = (char *) malloc(system_ext_size);
+ ld_library_path = (char *)NEW_C_HEAP_ARRAY(char, system_ext_size, mtInternal);
sprintf(ld_library_path, "%s" SYS_EXTENSIONS_DIR ":" SYS_EXTENSIONS_DIRS, user_home_dir);
#else
- ld_library_path = (char *) malloc(sizeof(REG_DIR) + sizeof("/lib/") +
- strlen(cpu_arch) + sizeof(DEFAULT_LIBPATH));
+ ld_library_path = (char *)NEW_C_HEAP_ARRAY(char, sizeof(REG_DIR) + sizeof("/lib/") +
+ strlen(cpu_arch) + sizeof(DEFAULT_LIBPATH), mtInternal);
sprintf(ld_library_path, REG_DIR "/lib/%s:" DEFAULT_LIBPATH, cpu_arch);
#endif
/*
* Get the user setting of LD_LIBRARY_PATH, and prepended it. It
* should always exist (until the legacy problem cited above is
* addressed).
*/
#ifdef __APPLE__
- // Prepend the default path with the JAVA_LIBRARY_PATH so that the app launcher code can specify a directory inside an app wrapper
- char *l = getenv("JAVA_LIBRARY_PATH");
+ // Prepend the default path with the JAVA_LIBRARY_PATH so that the app launcher code
+ // can specify a directory inside an app wrapper
+ char *l = ::getenv("JAVA_LIBRARY_PATH");
if (l != NULL) {
char *t = ld_library_path;
/* That's +1 for the colon and +1 for the trailing '\0' */
- ld_library_path = (char *) malloc(strlen(l) + 1 + strlen(t) + 1);
+ ld_library_path = (char *)NEW_C_HEAP_ARRAY(char, strlen(l) + 1 + strlen(t) + 1, mtInternal);
sprintf(ld_library_path, "%s:%s", l, t);
- free(t);
+ FREE_C_HEAP_ARRAY(char, t, mtInternal);
}
- char *v = getenv("DYLD_LIBRARY_PATH");
+ char *v = ::getenv("DYLD_LIBRARY_PATH");
#else
- char *v = getenv("LD_LIBRARY_PATH");
+ char *v = ::getenv("LD_LIBRARY_PATH");
#endif
if (v != NULL) {
char *t = ld_library_path;
/* That's +1 for the colon and +1 for the trailing '\0' */
- ld_library_path = (char *) malloc(strlen(v) + 1 + strlen(t) + 1);
+ ld_library_path = (char *)NEW_C_HEAP_ARRAY(char, strlen(v) + 1 + strlen(t) + 1, mtInternal);
sprintf(ld_library_path, "%s:%s", v, t);
- free(t);
+ FREE_C_HEAP_ARRAY(char, t, mtInternal);
}
#ifdef __APPLE__
// Apple's Java6 has "." at the beginning of java.library.path.
// OpenJDK on Windows has "." at the end of java.library.path.
@@ -475,17 +460,18 @@
// can be achieved by putting "." at the beginning of the
// JAVA_LIBRARY_PATH environment variable.
{
char *t = ld_library_path;
// that's +3 for appending ":." and the trailing '\0'
- ld_library_path = (char *) malloc(strlen(t) + 3);
+ ld_library_path = (char *)NEW_C_HEAP_ARRAY(char, strlen(t) + 3, mtInternal);
sprintf(ld_library_path, "%s:%s", t, ".");
- free(t);
+ FREE_C_HEAP_ARRAY(char, t, mtInternal);
}
#endif
Arguments::set_library_path(ld_library_path);
+ FREE_C_HEAP_ARRAY(char, ld_library_path, mtInternal);
}
/*
* Extensions directories.
*
@@ -493,43 +479,34 @@
* by the nulls included by the sizeof operator (so actually one byte more
* than necessary is allocated).
*/
{
#ifdef __APPLE__
- char *buf = malloc(strlen(Arguments::get_java_home()) +
- sizeof(EXTENSIONS_DIR) + system_ext_size);
+ char *buf = (char *)NEW_C_HEAP_ARRAY(char, strlen(Arguments::get_java_home()) +
+ sizeof(EXTENSIONS_DIR) + system_ext_size, mtInternal);
sprintf(buf, "%s" SYS_EXTENSIONS_DIR ":%s" EXTENSIONS_DIR ":"
SYS_EXTENSIONS_DIRS, user_home_dir, Arguments::get_java_home());
#else
- char *buf = malloc(strlen(Arguments::get_java_home()) +
- sizeof(EXTENSIONS_DIR) + sizeof(REG_DIR) + sizeof(EXTENSIONS_DIR));
- sprintf(buf, "%s" EXTENSIONS_DIR ":" REG_DIR EXTENSIONS_DIR,
- Arguments::get_java_home());
+ char *buf = (char *)NEW_C_HEAP_ARRAY(char, strlen(Arguments::get_java_home()) + sizeof(EXTENSIONS_DIR) +
+ sizeof(REG_DIR) + sizeof(EXTENSIONS_DIR), mtInternal);
+ sprintf(buf, "%s" EXTENSIONS_DIR ":" REG_DIR EXTENSIONS_DIR, Arguments::get_java_home());
#endif
-
Arguments::set_ext_dirs(buf);
+ FREE_C_HEAP_ARRAY(char, buf, mtInternal);
}
/* Endorsed standards default directory. */
- {
- char * buf;
- buf = malloc(strlen(Arguments::get_java_home()) + sizeof(ENDORSED_DIR));
+ char buf[MAXPATHLEN + sizeof(ENDORSED_DIR)];
sprintf(buf, "%s" ENDORSED_DIR, Arguments::get_java_home());
Arguments::set_endorsed_dirs(buf);
- }
- }
#ifdef __APPLE__
#undef SYS_EXTENSIONS_DIR
#endif
-#undef malloc
-#undef getenv
#undef EXTENSIONS_DIR
#undef ENDORSED_DIR
-
- // Done
- return;
+#undef REG_DIR
}
////////////////////////////////////////////////////////////////////////////////
// breakpoint support