src/os/linux/vm/os_linux.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.
@@ -315,13 +315,10 @@
_physical_memory = (julong)sysconf(_SC_PHYS_PAGES) * (julong)sysconf(_SC_PAGESIZE);
assert(processor_count() > 0, "linux error");
}
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.
@@ -344,144 +341,112 @@
// 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.
- */
+// 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
#define EXTENSIONS_DIR "/lib/ext"
#define ENDORSED_DIR "/lib/endorsed"
#define REG_DIR "/usr/java/packages"
+ // 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 */
+ *(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 = '\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 = '\0'; // Get rid of /<arch>.
pslash = strrchr(buf, '/');
- if (pslash != NULL)
- *pslash = '\0'; /* get rid of /lib */
+ if (pslash != NULL) {
+ *pslash = '\0'; // Get rid of /lib.
}
}
+ }
+ 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
- * 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.
- */
+ // 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));
+ // 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 *)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);
- /*
- * 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");
+ // 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);
+ // 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);
}
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).
- */
- {
- 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());
+ // Buffer that fits both sprintfs.
+ // 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[MAXPATHLEN + sizeof(EXTENSIONS_DIR) + sizeof(REG_DIR) + sizeof(EXTENSIONS_DIR) + sizeof(ENDORSED_DIR)];
+
+ // Extensions directories.
+ 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));
+ // Endorsed standards default directory.
sprintf(buf, "%s" ENDORSED_DIR, Arguments::get_java_home());
Arguments::set_endorsed_dirs(buf);
- }
- }
-#undef malloc
-#undef getenv
+#undef DEFAULT_LIBPATH
#undef EXTENSIONS_DIR
#undef ENDORSED_DIR
-
- // Done
- return;
+#undef REG_DIR
}
////////////////////////////////////////////////////////////////////////////////
// breakpoint support