src/os/bsd/vm/os_bsd.cpp
Print this page
rev 6136 : 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,316 ****
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.
--- 304,313 ----
*** 333,354 ****
// 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: ...
! * ...
! * 7: The default directories, normally /lib and /usr/lib.
! */
#ifndef DEFAULT_LIBPATH
#define DEFAULT_LIBPATH "/lib:/usr/lib"
#endif
#define EXTENSIONS_DIR "/lib/ext"
--- 330,345 ----
// Otherwise exit.
//
// Important note: if the location of libjvm.so changes this
// code needs to be changed accordingly.
! // See ld(1):
! // The linker uses the following search paths to locate required
! // shared libraries:
! // 1: ...
! // ...
! // 7: The default directories, normally /lib and /usr/lib.
#ifndef DEFAULT_LIBPATH
#define DEFAULT_LIBPATH "/lib:/usr/lib"
#endif
#define EXTENSIONS_DIR "/lib/ext"
*** 362,470 ****
// 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)
! *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);
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)
! *pslash = '\0'; /* get rid of /lib */
#endif
}
}
! 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('/', ':'))
return;
}
! /*
! * Where to look for native libraries
! *
! * Note: Due to a legacy implementation, most of the library path
! * is set in the launcher. This was to accomodate linking restrictions
! * on legacy Bsd implementations (which are no longer supported).
! * Eventually, all the library path setting will be done here.
! *
! * However, to prevent the proliferation of improperly built native
! * libraries, the new path component /usr/java/packages is added here.
! * Eventually, all the library path setting will be done here.
! */
{
char *ld_library_path;
! /*
! * Construct the invariant part of ld_library_path. Note that the
! * 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);
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));
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");
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);
sprintf(ld_library_path, "%s:%s", l, t);
! free(t);
}
! char *v = getenv("DYLD_LIBRARY_PATH");
#else
! 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);
sprintf(ld_library_path, "%s:%s", v, t);
! free(t);
}
#ifdef __APPLE__
// Apple's Java6 has "." at the beginning of java.library.path.
// OpenJDK on Windows has "." at the end of java.library.path.
--- 353,447 ----
// 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 *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) {
! *pslash = '\0'; // Get rid of /{client|server|hotspot}.
! }
! 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) {
! *pslash = '\0'; // Get rid of /lib.
! }
#endif
}
}
+ Arguments::set_java_home(buf);
! if (!set_boot_path('/', ':')) {
return;
}
+ }
! // Where to look for native libraries.
! //
! // Note: Due to a legacy implementation, most of the library path
! // is set in the launcher. This was to accomodate linking restrictions
! // on legacy Bsd implementations (which are no longer supported).
! // Eventually, all the library path setting will be done here.
! //
! // However, to prevent the proliferation of improperly built native
! // libraries, the new path component /usr/java/packages is added here.
! // Eventually, all the library path setting will be done here.
{
char *ld_library_path;
! // Construct the invariant part of ld_library_path. Note that the
! // 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 *)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 *)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");
if (l != NULL) {
char *t = ld_library_path;
/* That's +1 for the colon and +1 for the trailing '\0' */
! 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_C_HEAP_ARRAY(char, t, mtInternal);
}
! char *v = ::getenv("DYLD_LIBRARY_PATH");
#else
! 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 *)NEW_C_HEAP_ARRAY(char, strlen(v) + 1 + strlen(t) + 1, mtInternal);
sprintf(ld_library_path, "%s:%s", v, 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,535 ****
// 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);
sprintf(ld_library_path, "%s:%s", t, ".");
! free(t);
}
#endif
Arguments::set_library_path(ld_library_path);
}
! /*
! * Extensions directories.
! *
! * Note that the space for the colon and the trailing null are provided
! * 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);
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());
#endif
Arguments::set_ext_dirs(buf);
}
! /* Endorsed standards default directory. */
! {
! char * buf;
! buf = malloc(strlen(Arguments::get_java_home()) + 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;
}
////////////////////////////////////////////////////////////////////////////////
// breakpoint support
--- 452,503 ----
// 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 *)NEW_C_HEAP_ARRAY(char, strlen(t) + 3, mtInternal);
sprintf(ld_library_path, "%s:%s", 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.
! //
! // Note that the space for the colon and the trailing null are provided
! // by the nulls included by the sizeof operator (so actually one byte more
! // than necessary is allocated).
{
#ifdef __APPLE__
! 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 = (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[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 EXTENSIONS_DIR
#undef ENDORSED_DIR
! #undef REG_DIR
}
////////////////////////////////////////////////////////////////////////////////
// breakpoint support