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