aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorgoetz <none@none>2014-04-10 04:07:45 -0700
committergoetz <none@none>2014-04-10 04:07:45 -0700
commit372e59c4ca832cbf328054051315251a76a2efef (patch)
tree34d242d9d0f958ed5295b198c26e9c9f79cb883e /src
parent3a47cf59e0cdfbcba668ebbbffdf13cda2484d17 (diff)
8038201: Clean up misleading usage of malloc() in init_system_properties_values()
Summary: Remove the misleading malloc macro and cleanup the code Reviewed-by: dsamersoff, kvn Contributed-by: goetz.lindenmaier@sap.com
Diffstat (limited to 'src')
-rw-r--r--src/cpu/ppc/vm/templateInterpreter_ppc.cpp2
-rw-r--r--src/os/aix/vm/os_aix.cpp120
-rw-r--r--src/os/bsd/vm/os_bsd.cpp347
-rw-r--r--src/os/linux/vm/os_linux.cpp196
-rw-r--r--src/os/solaris/vm/os_solaris.cpp327
5 files changed, 444 insertions, 548 deletions
diff --git a/src/cpu/ppc/vm/templateInterpreter_ppc.cpp b/src/cpu/ppc/vm/templateInterpreter_ppc.cpp
index 2e19fca08..f22fbae29 100644
--- a/src/cpu/ppc/vm/templateInterpreter_ppc.cpp
+++ b/src/cpu/ppc/vm/templateInterpreter_ppc.cpp
@@ -1672,7 +1672,7 @@ address TemplateInterpreterGenerator::generate_trace_code(TosState state) {
//__ flush_bundle();
address entry = __ pc();
- char *bname = NULL;
+ const char *bname = NULL;
uint tsize = 0;
switch(state) {
case ftos:
diff --git a/src/os/aix/vm/os_aix.cpp b/src/os/aix/vm/os_aix.cpp
index 7aa645fbe..f74d17c84 100644
--- a/src/os/aix/vm/os_aix.cpp
+++ b/src/os/aix/vm/os_aix.cpp
@@ -60,8 +60,8 @@
#include "runtime/sharedRuntime.hpp"
#include "runtime/statSampler.hpp"
#include "runtime/stubRoutines.hpp"
-#include "runtime/threadCritical.hpp"
#include "runtime/thread.inline.hpp"
+#include "runtime/threadCritical.hpp"
#include "runtime/timer.hpp"
#include "services/attachListener.hpp"
#include "services/runtimeService.hpp"
@@ -70,16 +70,6 @@
#include "utilities/events.hpp"
#include "utilities/growableArray.hpp"
#include "utilities/vmError.hpp"
-#ifdef TARGET_ARCH_ppc
-# include "assembler_ppc.inline.hpp"
-# include "nativeInst_ppc.hpp"
-#endif
-#ifdef COMPILER1
-#include "c1/c1_Runtime1.hpp"
-#endif
-#ifdef COMPILER2
-#include "opto/runtime.hpp"
-#endif
// put OS-includes here (sorted alphabetically)
#include <errno.h>
@@ -378,13 +368,14 @@ void os::Aix::query_multipage_support() {
assert(_page_size == SIZE_4K, "surprise!");
- // query default data page size (default page size for C-Heap, pthread stacks and .bss).
+ // Query default data page size (default page size for C-Heap, pthread stacks and .bss).
// Default data page size is influenced either by linker options (-bdatapsize)
// or by environment variable LDR_CNTRL (suboption DATAPSIZE). If none is given,
// default should be 4K.
size_t data_page_size = SIZE_4K;
{
void* p = ::malloc(SIZE_16M);
+ guarantee(p != NULL, "malloc failed");
data_page_size = os::Aix::query_pagesize(p);
::free(p);
}
@@ -511,85 +502,76 @@ query_multipage_support_end:
} // end os::Aix::query_multipage_support()
-
-// The code for this method was initially derived from the version in os_linux.cpp
+// The code for this method was initially derived from the version in os_linux.cpp.
void os::init_system_properties_values() {
- // The next few definitions allow the code to be verbatim:
-#define malloc(n) (char*)NEW_C_HEAP_ARRAY(char, (n), mtInternal)
+
#define DEFAULT_LIBPATH "/usr/lib:/lib"
#define EXTENSIONS_DIR "/lib/ext"
#define ENDORSED_DIR "/lib/endorsed"
- // sysclasspath, java_home, dll_dir
- char *home_path;
- char *dll_path;
- char *pslash;
- char buf[MAXPATHLEN];
- os::jvm_path(buf, sizeof(buf));
+ // Buffer that fits several sprintfs.
+ // Note that the space for the trailing null is provided
+ // by the nulls included by the sizeof operator.
+ const size_t bufsize =
+ MAX3((size_t)MAXPATHLEN, // For dll_dir & friends.
+ (size_t)MAXPATHLEN + sizeof(EXTENSIONS_DIR), // extensions dir
+ (size_t)MAXPATHLEN + sizeof(ENDORSED_DIR)); // endorsed dir
+ char *buf = (char *)NEW_C_HEAP_ARRAY(char, bufsize, mtInternal);
- // 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);
- strcpy(dll_path, buf);
- Arguments::set_dll_dir(dll_path);
+ // sysclasspath, java_home, dll_dir
+ {
+ char *pslash;
+ os::jvm_path(buf, bufsize);
- if (pslash != NULL) {
+ // 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 /<arch>
+ *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 /lib
+ *pslash = '\0'; // Get rid of /<arch>.
+ pslash = strrchr(buf, '/');
+ if (pslash != NULL) {
+ *pslash = '\0'; // Get rid of /lib.
+ }
}
}
+ Arguments::set_java_home(buf);
+ set_boot_path('/', ':');
}
- home_path = malloc(strlen(buf) + 1);
- strcpy(home_path, buf);
- Arguments::set_java_home(home_path);
-
- if (!set_boot_path('/', ':')) return;
-
- // Where to look for native libraries
+ // Where to look for native libraries.
- // On Aix we get the user setting of LIBPATH
+ // On Aix we get the user setting of LIBPATH.
// Eventually, all the library path setting will be done here.
- char *ld_library_path;
-
- // Construct the invariant part of ld_library_path.
- ld_library_path = (char *) malloc(sizeof(DEFAULT_LIBPATH));
- sprintf(ld_library_path, DEFAULT_LIBPATH);
-
- // Get the user setting of LIBPATH, and prepended it.
- char *v = ::getenv("LIBPATH");
- if (v == NULL) {
- v = "";
- }
-
- 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);
-
+ // Get the user setting of LIBPATH.
+ const char *v = ::getenv("LIBPATH");
+ const char *v_colon = ":";
+ if (v == NULL) { v = ""; v_colon = ""; }
+
+ // Concatenate user and invariant part of ld_library_path.
+ // That's +1 for the colon and +1 for the trailing '\0'.
+ char *ld_library_path = (char *)NEW_C_HEAP_ARRAY(char, strlen(v) + 1 + sizeof(DEFAULT_LIBPATH) + 1, mtInternal);
+ sprintf(ld_library_path, "%s%s" DEFAULT_LIBPATH, v, v_colon);
Arguments::set_library_path(ld_library_path);
+ FREE_C_HEAP_ARRAY(char, ld_library_path, mtInternal);
- // Extensions directories
- char* cbuf = malloc(strlen(Arguments::get_java_home()) + sizeof(EXTENSIONS_DIR));
- sprintf(cbuf, "%s" EXTENSIONS_DIR, Arguments::get_java_home());
- Arguments::set_ext_dirs(cbuf);
+ // Extensions directories.
+ sprintf(buf, "%s" EXTENSIONS_DIR, Arguments::get_java_home());
+ Arguments::set_ext_dirs(buf);
// Endorsed standards default directory.
- cbuf = malloc(strlen(Arguments::get_java_home()) + sizeof(ENDORSED_DIR));
- sprintf(cbuf, "%s" ENDORSED_DIR, Arguments::get_java_home());
- Arguments::set_endorsed_dirs(cbuf);
+ sprintf(buf, "%s" ENDORSED_DIR, Arguments::get_java_home());
+ Arguments::set_endorsed_dirs(buf);
+
+ FREE_C_HEAP_ARRAY(char, buf, mtInternal);
-#undef malloc
#undef DEFAULT_LIBPATH
#undef EXTENSIONS_DIR
#undef ENDORSED_DIR
diff --git a/src/os/bsd/vm/os_bsd.cpp b/src/os/bsd/vm/os_bsd.cpp
index 084c9d33b..b535c05b4 100644
--- a/src/os/bsd/vm/os_bsd.cpp
+++ b/src/os/bsd/vm/os_bsd.cpp
@@ -306,9 +306,6 @@ static const char *get_home() {
#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.
@@ -335,199 +332,205 @@ void os::init_system_properties_values() {
// 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.
- */
+// 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
+// Base path of extensions installed on the system.
+#define SYS_EXT_DIR "/usr/java/packages"
#define EXTENSIONS_DIR "/lib/ext"
#define ENDORSED_DIR "/lib/endorsed"
-#define REG_DIR "/usr/java/packages"
-#ifdef __APPLE__
-#define SYS_EXTENSIONS_DIR "/Library/Java/Extensions"
-#define SYS_EXTENSIONS_DIRS SYS_EXTENSIONS_DIR ":/Network" SYS_EXTENSIONS_DIR ":/System" SYS_EXTENSIONS_DIR ":/usr/lib/java"
- const char *user_home_dir = get_home();
- // 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
+#ifndef __APPLE__
+ // Buffer that fits several sprintfs.
+ // Note that the space for the colon and the trailing null are provided
+ // by the nulls included by the sizeof operator.
+ const size_t bufsize =
+ MAX3((size_t)MAXPATHLEN, // For dll_dir & friends.
+ (size_t)MAXPATHLEN + sizeof(EXTENSIONS_DIR) + sizeof(SYS_EXT_DIR) + sizeof(EXTENSIONS_DIR), // extensions dir
+ (size_t)MAXPATHLEN + sizeof(ENDORSED_DIR)); // endorsed dir
+ char *buf = (char *)NEW_C_HEAP_ARRAY(char, bufsize, mtInternal);
+
+ // sysclasspath, java_home, dll_dir
{
- /* 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);
+ char *pslash;
+ os::jvm_path(buf, bufsize);
+
+ // 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>.
+ pslash = strrchr(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
- }
+ *pslash = '\0'; // Get rid of /lib.
}
-
- 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;
+ }
}
+ Arguments::set_java_home(buf);
+ set_boot_path('/', ':');
+ }
- /*
- * 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);
- }
+ // 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.
+ {
+ // Get the user setting of LD_LIBRARY_PATH, and prepended it. It
+ // should always exist (until the legacy problem cited above is
+ // addressed).
+ const char *v = ::getenv("LD_LIBRARY_PATH");
+ const char *v_colon = ":";
+ if (v == NULL) { v = ""; v_colon = ""; }
+ // That's +1 for the colon and +1 for the trailing '\0'.
+ char *ld_library_path = (char *)NEW_C_HEAP_ARRAY(char,
+ strlen(v) + 1 +
+ sizeof(SYS_EXT_DIR) + sizeof("/lib/") + strlen(cpu_arch) + sizeof(DEFAULT_LIBPATH) + 1,
+ mtInternal);
+ sprintf(ld_library_path, "%s%s" SYS_EXT_DIR "/lib/%s:" DEFAULT_LIBPATH, v, v_colon, cpu_arch);
+ Arguments::set_library_path(ld_library_path);
+ FREE_C_HEAP_ARRAY(char, ld_library_path, mtInternal);
+ }
+
+ // Extensions directories.
+ sprintf(buf, "%s" EXTENSIONS_DIR ":" SYS_EXT_DIR EXTENSIONS_DIR, Arguments::get_java_home());
+ Arguments::set_ext_dirs(buf);
+
+ // Endorsed standards default directory.
+ sprintf(buf, "%s" ENDORSED_DIR, Arguments::get_java_home());
+ Arguments::set_endorsed_dirs(buf);
+
+ FREE_C_HEAP_ARRAY(char, buf, mtInternal);
+
+#else // __APPLE__
- 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);
- }
+#define SYS_EXTENSIONS_DIR "/Library/Java/Extensions"
+#define SYS_EXTENSIONS_DIRS SYS_EXTENSIONS_DIR ":/Network" SYS_EXTENSIONS_DIR ":/System" SYS_EXTENSIONS_DIR ":/usr/lib/java"
-#ifdef __APPLE__
- // Apple's Java6 has "." at the beginning of java.library.path.
- // OpenJDK on Windows has "." at the end of java.library.path.
- // OpenJDK on Linux and Solaris don't have "." in java.library.path
- // at all. To ease the transition from Apple's Java6 to OpenJDK7,
- // "." is appended to the end of java.library.path. Yes, this
- // could cause a change in behavior, but Apple's Java6 behavior
- // 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
+ const char *user_home_dir = get_home();
+ // The null in SYS_EXTENSIONS_DIRS counts for the size of the colon after user_home_dir.
+ size_t system_ext_size = strlen(user_home_dir) + sizeof(SYS_EXTENSIONS_DIR) +
+ sizeof(SYS_EXTENSIONS_DIRS);
+
+ // Buffer that fits several sprintfs.
+ // Note that the space for the colon and the trailing null are provided
+ // by the nulls included by the sizeof operator.
+ const size_t bufsize =
+ MAX3((size_t)MAXPATHLEN, // for dll_dir & friends.
+ (size_t)MAXPATHLEN + sizeof(EXTENSIONS_DIR) + system_ext_size, // extensions dir
+ (size_t)MAXPATHLEN + sizeof(ENDORSED_DIR)); // endorsed dir
+ char *buf = (char *)NEW_C_HEAP_ARRAY(char, bufsize, mtInternal);
+
+ // sysclasspath, java_home, dll_dir
+ {
+ char *pslash;
+ os::jvm_path(buf, bufsize);
+
+ // 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);
- Arguments::set_library_path(ld_library_path);
+ if (pslash != NULL) {
+ pslash = strrchr(buf, '/');
+ if (pslash != NULL) {
+ *pslash = '\0'; // Get rid of /lib.
+ }
}
+ Arguments::set_java_home(buf);
+ set_boot_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
+ // 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.
+ {
+ // Get the user setting of LD_LIBRARY_PATH, and prepended it. It
+ // should always exist (until the legacy problem cited above is
+ // addressed).
+ // Prepend the default path with the JAVA_LIBRARY_PATH so that the app launcher code
+ // can specify a directory inside an app wrapper
+ const char *l = ::getenv("JAVA_LIBRARY_PATH");
+ const char *l_colon = ":";
+ if (l == NULL) { l = ""; l_colon = ""; }
+
+ const char *v = ::getenv("DYLD_LIBRARY_PATH");
+ const char *v_colon = ":";
+ if (v == NULL) { v = ""; v_colon = ""; }
+
+ // Apple's Java6 has "." at the beginning of java.library.path.
+ // OpenJDK on Windows has "." at the end of java.library.path.
+ // OpenJDK on Linux and Solaris don't have "." in java.library.path
+ // at all. To ease the transition from Apple's Java6 to OpenJDK7,
+ // "." is appended to the end of java.library.path. Yes, this
+ // could cause a change in behavior, but Apple's Java6 behavior
+ // can be achieved by putting "." at the beginning of the
+ // JAVA_LIBRARY_PATH environment variable.
+ char *ld_library_path = (char *)NEW_C_HEAP_ARRAY(char,
+ strlen(v) + 1 + strlen(l) + 1 +
+ system_ext_size + 3,
+ mtInternal);
+ sprintf(ld_library_path, "%s%s%s%s%s" SYS_EXTENSIONS_DIR ":" SYS_EXTENSIONS_DIRS ":.",
+ v, v_colon, l, l_colon, user_home_dir);
+ 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).
+ sprintf(buf, "%s" SYS_EXTENSIONS_DIR ":%s" EXTENSIONS_DIR ":" SYS_EXTENSIONS_DIRS,
+ user_home_dir, Arguments::get_java_home());
+ Arguments::set_ext_dirs(buf);
- Arguments::set_ext_dirs(buf);
- }
+ // Endorsed standards default directory.
+ sprintf(buf, "%s" ENDORSED_DIR, Arguments::get_java_home());
+ Arguments::set_endorsed_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);
- }
- }
+ FREE_C_HEAP_ARRAY(char, buf, mtInternal);
-#ifdef __APPLE__
#undef SYS_EXTENSIONS_DIR
-#endif
-#undef malloc
-#undef getenv
+#undef SYS_EXTENSIONS_DIRS
+
+#endif // __APPLE__
+
+#undef SYS_EXT_DIR
#undef EXTENSIONS_DIR
#undef ENDORSED_DIR
-
- // Done
- return;
}
////////////////////////////////////////////////////////////////////////////////
@@ -3223,7 +3226,7 @@ void os::Bsd::set_signal_handler(int sig, bool set_installed) {
sigAct.sa_sigaction = signalHandler;
sigAct.sa_flags = SA_SIGINFO|SA_RESTART;
}
-#if __APPLE__
+#ifdef __APPLE__
// Needed for main thread as XNU (Mac OS X kernel) will only deliver SIGSEGV
// (which starts as SIGBUS) on main thread with faulting address inside "stack+guard pages"
// if the signal handler declares it will handle it on alternate stack.
diff --git a/src/os/linux/vm/os_linux.cpp b/src/os/linux/vm/os_linux.cpp
index 3039e7064..584198491 100644
--- a/src/os/linux/vm/os_linux.cpp
+++ b/src/os/linux/vm/os_linux.cpp
@@ -319,9 +319,6 @@ void os::Linux::initialize_system_info() {
}
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.
@@ -348,140 +345,101 @@ void os::init_system_properties_values() {
// 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.
- */
+// 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.
#if defined(AMD64) || defined(_LP64) && (defined(SPARC) || defined(PPC) || defined(S390))
#define DEFAULT_LIBPATH "/usr/lib64:/lib64:/lib:/usr/lib"
#else
#define DEFAULT_LIBPATH "/lib:/usr/lib"
#endif
+// Base path of extensions installed on the system.
+#define SYS_EXT_DIR "/usr/java/packages"
#define EXTENSIONS_DIR "/lib/ext"
#define ENDORSED_DIR "/lib/endorsed"
-#define REG_DIR "/usr/java/packages"
- {
- /* 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);
+ // Buffer that fits several sprintfs.
+ // Note that the space for the colon and the trailing null are provided
+ // by the nulls included by the sizeof operator.
+ const size_t bufsize =
+ MAX3((size_t)MAXPATHLEN, // For dll_dir & friends.
+ (size_t)MAXPATHLEN + sizeof(EXTENSIONS_DIR) + sizeof(SYS_EXT_DIR) + sizeof(EXTENSIONS_DIR), // extensions dir
+ (size_t)MAXPATHLEN + sizeof(ENDORSED_DIR)); // endorsed dir
+ char *buf = (char *)NEW_C_HEAP_ARRAY(char, bufsize, mtInternal);
- if (pslash != NULL) {
- pslash = strrchr(buf, '/');
- if (pslash != NULL) {
- *pslash = '\0'; /* get rid of /<arch> */
- pslash = strrchr(buf, '/');
- if (pslash != NULL)
- *pslash = '\0'; /* get rid of /lib */
- }
- }
-
- 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;
+ // sysclasspath, java_home, dll_dir
+ {
+ char *pslash;
+ os::jvm_path(buf, bufsize);
+
+ // 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);
- /*
- * 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 Linux 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).
- */
- 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);
-
- /*
- * Get the user setting of LD_LIBRARY_PATH, and prepended it. It
- * should always exist (until the legacy problem cited above is
- * addressed).
- */
- char *v = getenv("LD_LIBRARY_PATH");
- 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);
+ if (pslash != NULL) {
+ pslash = strrchr(buf, '/');
+ if (pslash != NULL) {
+ *pslash = '\0'; // Get rid of /<arch>.
+ pslash = strrchr(buf, '/');
+ if (pslash != NULL) {
+ *pslash = '\0'; // Get rid of /lib.
}
- 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).
- */
- {
- 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());
- 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);
+ }
}
+ Arguments::set_java_home(buf);
+ set_boot_path('/', ':');
}
-#undef malloc
-#undef getenv
+ // 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 Linux 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.
+ {
+ // Get the user setting of LD_LIBRARY_PATH, and prepended it. It
+ // should always exist (until the legacy problem cited above is
+ // addressed).
+ const char *v = ::getenv("LD_LIBRARY_PATH");
+ const char *v_colon = ":";
+ if (v == NULL) { v = ""; v_colon = ""; }
+ // That's +1 for the colon and +1 for the trailing '\0'.
+ char *ld_library_path = (char *)NEW_C_HEAP_ARRAY(char,
+ strlen(v) + 1 +
+ sizeof(SYS_EXT_DIR) + sizeof("/lib/") + strlen(cpu_arch) + sizeof(DEFAULT_LIBPATH) + 1,
+ mtInternal);
+ sprintf(ld_library_path, "%s%s" SYS_EXT_DIR "/lib/%s:" DEFAULT_LIBPATH, v, v_colon, cpu_arch);
+ Arguments::set_library_path(ld_library_path);
+ FREE_C_HEAP_ARRAY(char, ld_library_path, mtInternal);
+ }
+
+ // Extensions directories.
+ sprintf(buf, "%s" EXTENSIONS_DIR ":" SYS_EXT_DIR EXTENSIONS_DIR, Arguments::get_java_home());
+ Arguments::set_ext_dirs(buf);
+
+ // Endorsed standards default directory.
+ sprintf(buf, "%s" ENDORSED_DIR, Arguments::get_java_home());
+ Arguments::set_endorsed_dirs(buf);
+
+ FREE_C_HEAP_ARRAY(char, buf, mtInternal);
+
+#undef DEFAULT_LIBPATH
+#undef SYS_EXT_DIR
#undef EXTENSIONS_DIR
#undef ENDORSED_DIR
-
- // Done
- return;
}
////////////////////////////////////////////////////////////////////////////////
diff --git a/src/os/solaris/vm/os_solaris.cpp b/src/os/solaris/vm/os_solaris.cpp
index 2a8b6d2ab..db210db82 100644
--- a/src/os/solaris/vm/os_solaris.cpp
+++ b/src/os/solaris/vm/os_solaris.cpp
@@ -648,9 +648,6 @@ bool os::have_special_privileges() {
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.
@@ -677,218 +674,174 @@ void os::init_system_properties_values() {
// 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 free(p) FREE_C_HEAP_ARRAY(char, p, mtInternal)
-#define getenv(n) ::getenv(n)
-
+// Base path of extensions installed on the system.
+#define SYS_EXT_DIR "/usr/jdk/packages"
#define EXTENSIONS_DIR "/lib/ext"
#define ENDORSED_DIR "/lib/endorsed"
-#define COMMON_DIR "/usr/jdk/packages"
+ char cpu_arch[12];
+ // Buffer that fits several sprintfs.
+ // Note that the space for the colon and the trailing null are provided
+ // by the nulls included by the sizeof operator.
+ const size_t bufsize =
+ MAX4((size_t)MAXPATHLEN, // For dll_dir & friends.
+ sizeof(SYS_EXT_DIR) + sizeof("/lib/") + strlen(cpu_arch), // invariant ld_library_path
+ (size_t)MAXPATHLEN + sizeof(EXTENSIONS_DIR) + sizeof(SYS_EXT_DIR) + sizeof(EXTENSIONS_DIR), // extensions dir
+ (size_t)MAXPATHLEN + sizeof(ENDORSED_DIR)); // endorsed dir
+ char *buf = (char *)NEW_C_HEAP_ARRAY(char, bufsize, mtInternal);
+
+ // sysclasspath, java_home, dll_dir
{
- /* 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);
+ char *pslash;
+ os::jvm_path(buf, bufsize);
+
+ // 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>.
+ pslash = strrchr(buf, '/');
if (pslash != NULL) {
- pslash = strrchr(buf, '/');
- if (pslash != NULL) {
- *pslash = '\0'; /* get rid of /<arch> */
- pslash = strrchr(buf, '/');
- if (pslash != NULL)
- *pslash = '\0'; /* get rid of /lib */
- }
+ *pslash = '\0'; // Get rid of /lib.
}
-
- 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;
+ }
}
+ Arguments::set_java_home(buf);
+ set_boot_path('/', ':');
+ }
- /*
- * Where to look for native libraries
- */
- {
- // Use dlinfo() to determine the correct java.library.path.
- //
- // If we're launched by the Java launcher, and the user
- // does not set java.library.path explicitly on the commandline,
- // the Java launcher sets LD_LIBRARY_PATH for us and unsets
- // LD_LIBRARY_PATH_32 and LD_LIBRARY_PATH_64. In this case
- // dlinfo returns LD_LIBRARY_PATH + crle settings (including
- // /usr/lib), which is exactly what we want.
- //
- // If the user does set java.library.path, it completely
- // overwrites this setting, and always has.
- //
- // If we're not launched by the Java launcher, we may
- // get here with any/all of the LD_LIBRARY_PATH[_32|64]
- // settings. Again, dlinfo does exactly what we want.
-
- Dl_serinfo _info, *info = &_info;
- Dl_serpath *path;
- char* library_path;
- char *common_path;
- int i;
-
- // determine search path count and required buffer size
- if (dlinfo(RTLD_SELF, RTLD_DI_SERINFOSIZE, (void *)info) == -1) {
- vm_exit_during_initialization("dlinfo SERINFOSIZE request", dlerror());
- }
+ // Where to look for native libraries.
+ {
+ // Use dlinfo() to determine the correct java.library.path.
+ //
+ // If we're launched by the Java launcher, and the user
+ // does not set java.library.path explicitly on the commandline,
+ // the Java launcher sets LD_LIBRARY_PATH for us and unsets
+ // LD_LIBRARY_PATH_32 and LD_LIBRARY_PATH_64. In this case
+ // dlinfo returns LD_LIBRARY_PATH + crle settings (including
+ // /usr/lib), which is exactly what we want.
+ //
+ // If the user does set java.library.path, it completely
+ // overwrites this setting, and always has.
+ //
+ // If we're not launched by the Java launcher, we may
+ // get here with any/all of the LD_LIBRARY_PATH[_32|64]
+ // settings. Again, dlinfo does exactly what we want.
+
+ Dl_serinfo info_sz, *info = &info_sz;
+ Dl_serpath *path;
+ char *library_path;
+ char *common_path = buf;
+
+ // Determine search path count and required buffer size.
+ if (dlinfo(RTLD_SELF, RTLD_DI_SERINFOSIZE, (void *)info) == -1) {
+ FREE_C_HEAP_ARRAY(char, buf, mtInternal);
+ vm_exit_during_initialization("dlinfo SERINFOSIZE request", dlerror());
+ }
- // allocate new buffer and initialize
- info = (Dl_serinfo*)malloc(_info.dls_size);
- if (info == NULL) {
- vm_exit_out_of_memory(_info.dls_size, OOM_MALLOC_ERROR,
- "init_system_properties_values info");
- }
- info->dls_size = _info.dls_size;
- info->dls_cnt = _info.dls_cnt;
+ // Allocate new buffer and initialize.
+ info = (Dl_serinfo*)NEW_C_HEAP_ARRAY(char, info_sz.dls_size, mtInternal);
+ info->dls_size = info_sz.dls_size;
+ info->dls_cnt = info_sz.dls_cnt;
- // obtain search path information
- if (dlinfo(RTLD_SELF, RTLD_DI_SERINFO, (void *)info) == -1) {
- free(info);
- vm_exit_during_initialization("dlinfo SERINFO request", dlerror());
- }
+ // Obtain search path information.
+ if (dlinfo(RTLD_SELF, RTLD_DI_SERINFO, (void *)info) == -1) {
+ FREE_C_HEAP_ARRAY(char, buf, mtInternal);
+ FREE_C_HEAP_ARRAY(char, info, mtInternal);
+ vm_exit_during_initialization("dlinfo SERINFO request", dlerror());
+ }
- path = &info->dls_serpath[0];
+ path = &info->dls_serpath[0];
- // Note: Due to a legacy implementation, most of the library path
- // is set in the launcher. This was to accomodate linking restrictions
- // on legacy Solaris 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/jdk/packages is added here.
+ // Note: Due to a legacy implementation, most of the library path
+ // is set in the launcher. This was to accomodate linking restrictions
+ // on legacy Solaris 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/jdk/packages is added here.
- // Determine the actual CPU architecture.
- char cpu_arch[12];
- sysinfo(SI_ARCHITECTURE, cpu_arch, sizeof(cpu_arch));
+ // Determine the actual CPU architecture.
+ sysinfo(SI_ARCHITECTURE, cpu_arch, sizeof(cpu_arch));
#ifdef _LP64
- // If we are a 64-bit vm, perform the following translations:
- // sparc -> sparcv9
- // i386 -> amd64
- if (strcmp(cpu_arch, "sparc") == 0)
- strcat(cpu_arch, "v9");
- else if (strcmp(cpu_arch, "i386") == 0)
- strcpy(cpu_arch, "amd64");
+ // If we are a 64-bit vm, perform the following translations:
+ // sparc -> sparcv9
+ // i386 -> amd64
+ if (strcmp(cpu_arch, "sparc") == 0) {
+ strcat(cpu_arch, "v9");
+ } else if (strcmp(cpu_arch, "i386") == 0) {
+ strcpy(cpu_arch, "amd64");
+ }
#endif
- // 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.
- size_t bufsize = sizeof(COMMON_DIR) + sizeof("/lib/") + strlen(cpu_arch);
- common_path = malloc(bufsize);
- if (common_path == NULL) {
- free(info);
- vm_exit_out_of_memory(bufsize, OOM_MALLOC_ERROR,
- "init_system_properties_values common_path");
- }
- sprintf(common_path, COMMON_DIR "/lib/%s", cpu_arch);
-
- // struct size is more than sufficient for the path components obtained
- // through the dlinfo() call, so only add additional space for the path
- // components explicitly added here.
- bufsize = info->dls_size + strlen(common_path);
- library_path = malloc(bufsize);
- if (library_path == NULL) {
- free(info);
- free(common_path);
- vm_exit_out_of_memory(bufsize, OOM_MALLOC_ERROR,
- "init_system_properties_values library_path");
- }
- library_path[0] = '\0';
-
- // Construct the desired Java library path from the linker's library
- // search path.
- //
- // For compatibility, it is optimal that we insert the additional path
- // components specific to the Java VM after those components specified
- // in LD_LIBRARY_PATH (if any) but before those added by the ld.so
- // infrastructure.
- if (info->dls_cnt == 0) { // Not sure this can happen, but allow for it
- strcpy(library_path, common_path);
- } else {
- int inserted = 0;
- for (i = 0; i < info->dls_cnt; i++, path++) {
- uint_t flags = path->dls_flags & LA_SER_MASK;
- if (((flags & LA_SER_LIBPATH) == 0) && !inserted) {
- strcat(library_path, common_path);
- strcat(library_path, os::path_separator());
- inserted = 1;
- }
- strcat(library_path, path->dls_name);
+ // Construct the invariant part of ld_library_path.
+ sprintf(common_path, SYS_EXT_DIR "/lib/%s", cpu_arch);
+
+ // Struct size is more than sufficient for the path components obtained
+ // through the dlinfo() call, so only add additional space for the path
+ // components explicitly added here.
+ size_t library_path_size = info->dls_size + strlen(common_path);
+ library_path = (char *)NEW_C_HEAP_ARRAY(char, library_path_size, mtInternal);
+ library_path[0] = '\0';
+
+ // Construct the desired Java library path from the linker's library
+ // search path.
+ //
+ // For compatibility, it is optimal that we insert the additional path
+ // components specific to the Java VM after those components specified
+ // in LD_LIBRARY_PATH (if any) but before those added by the ld.so
+ // infrastructure.
+ if (info->dls_cnt == 0) { // Not sure this can happen, but allow for it.
+ strcpy(library_path, common_path);
+ } else {
+ int inserted = 0;
+ int i;
+ for (i = 0; i < info->dls_cnt; i++, path++) {
+ uint_t flags = path->dls_flags & LA_SER_MASK;
+ if (((flags & LA_SER_LIBPATH) == 0) && !inserted) {
+ strcat(library_path, common_path);
strcat(library_path, os::path_separator());
+ inserted = 1;
}
- // eliminate trailing path separator
- library_path[strlen(library_path)-1] = '\0';
+ strcat(library_path, path->dls_name);
+ strcat(library_path, os::path_separator());
}
+ // Eliminate trailing path separator.
+ library_path[strlen(library_path)-1] = '\0';
+ }
- // happens before argument parsing - can't use a trace flag
- // tty->print_raw("init_system_properties_values: native lib path: ");
- // tty->print_raw_cr(library_path);
+ // happens before argument parsing - can't use a trace flag
+ // tty->print_raw("init_system_properties_values: native lib path: ");
+ // tty->print_raw_cr(library_path);
- // callee copies into its own buffer
- Arguments::set_library_path(library_path);
+ // Callee copies into its own buffer.
+ Arguments::set_library_path(library_path);
- free(common_path);
- free(library_path);
- free(info);
- }
+ FREE_C_HEAP_ARRAY(char, library_path, mtInternal);
+ FREE_C_HEAP_ARRAY(char, info, 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).
- */
- {
- char *buf = (char *) malloc(strlen(Arguments::get_java_home()) +
- sizeof(EXTENSIONS_DIR) + sizeof(COMMON_DIR) +
- sizeof(EXTENSIONS_DIR));
- sprintf(buf, "%s" EXTENSIONS_DIR ":" COMMON_DIR EXTENSIONS_DIR,
- Arguments::get_java_home());
- Arguments::set_ext_dirs(buf);
- }
+ // Extensions directories.
+ sprintf(buf, "%s" EXTENSIONS_DIR ":" SYS_EXT_DIR EXTENSIONS_DIR, Arguments::get_java_home());
+ Arguments::set_ext_dirs(buf);
- /* Endorsed standards default directory. */
- {
- char * buf = malloc(strlen(Arguments::get_java_home()) + sizeof(ENDORSED_DIR));
- sprintf(buf, "%s" ENDORSED_DIR, Arguments::get_java_home());
- Arguments::set_endorsed_dirs(buf);
- }
- }
+ // Endorsed standards default directory.
+ sprintf(buf, "%s" ENDORSED_DIR, Arguments::get_java_home());
+ Arguments::set_endorsed_dirs(buf);
-#undef malloc
-#undef free
-#undef getenv
+ FREE_C_HEAP_ARRAY(char, buf, mtInternal);
+
+#undef SYS_EXT_DIR
#undef EXTENSIONS_DIR
#undef ENDORSED_DIR
-#undef COMMON_DIR
-
}
void os::breakpoint() {