hotspot/src/os/solaris/vm/os_solaris.cpp
changeset 14471 f3a6b82e25cf
parent 14120 7d298141c258
child 14626 0cf4eccf130f
child 14583 d70ee55535f4
equal deleted inserted replaced
14383:f31aacbd0f36 14471:f3a6b82e25cf
  1892     return false;
  1892     return false;
  1893   }
  1893   }
  1894   return os::stat(filename, &statbuf) == 0;
  1894   return os::stat(filename, &statbuf) == 0;
  1895 }
  1895 }
  1896 
  1896 
  1897 void os::dll_build_name(char* buffer, size_t buflen,
  1897 bool os::dll_build_name(char* buffer, size_t buflen,
  1898                         const char* pname, const char* fname) {
  1898                         const char* pname, const char* fname) {
       
  1899   bool retval = false;
  1899   const size_t pnamelen = pname ? strlen(pname) : 0;
  1900   const size_t pnamelen = pname ? strlen(pname) : 0;
  1900 
  1901 
  1901   // Quietly truncate on buffer overflow.  Should be an error.
  1902   // Return error on buffer overflow.
  1902   if (pnamelen + strlen(fname) + 10 > (size_t) buflen) {
  1903   if (pnamelen + strlen(fname) + 10 > (size_t) buflen) {
  1903     *buffer = '\0';
  1904     return retval;
  1904     return;
       
  1905   }
  1905   }
  1906 
  1906 
  1907   if (pnamelen == 0) {
  1907   if (pnamelen == 0) {
  1908     snprintf(buffer, buflen, "lib%s.so", fname);
  1908     snprintf(buffer, buflen, "lib%s.so", fname);
       
  1909     retval = true;
  1909   } else if (strchr(pname, *os::path_separator()) != NULL) {
  1910   } else if (strchr(pname, *os::path_separator()) != NULL) {
  1910     int n;
  1911     int n;
  1911     char** pelements = split_path(pname, &n);
  1912     char** pelements = split_path(pname, &n);
  1912     for (int i = 0 ; i < n ; i++) {
  1913     for (int i = 0 ; i < n ; i++) {
  1913       // really shouldn't be NULL but what the heck, check can't hurt
  1914       // really shouldn't be NULL but what the heck, check can't hurt
  1914       if (pelements[i] == NULL || strlen(pelements[i]) == 0) {
  1915       if (pelements[i] == NULL || strlen(pelements[i]) == 0) {
  1915         continue; // skip the empty path values
  1916         continue; // skip the empty path values
  1916       }
  1917       }
  1917       snprintf(buffer, buflen, "%s/lib%s.so", pelements[i], fname);
  1918       snprintf(buffer, buflen, "%s/lib%s.so", pelements[i], fname);
  1918       if (file_exists(buffer)) {
  1919       if (file_exists(buffer)) {
       
  1920         retval = true;
  1919         break;
  1921         break;
  1920       }
  1922       }
  1921     }
  1923     }
  1922     // release the storage
  1924     // release the storage
  1923     for (int i = 0 ; i < n ; i++) {
  1925     for (int i = 0 ; i < n ; i++) {
  1928     if (pelements != NULL) {
  1930     if (pelements != NULL) {
  1929       FREE_C_HEAP_ARRAY(char*, pelements, mtInternal);
  1931       FREE_C_HEAP_ARRAY(char*, pelements, mtInternal);
  1930     }
  1932     }
  1931   } else {
  1933   } else {
  1932     snprintf(buffer, buflen, "%s/lib%s.so", pname, fname);
  1934     snprintf(buffer, buflen, "%s/lib%s.so", pname, fname);
  1933   }
  1935     retval = true;
       
  1936   }
       
  1937   return retval;
  1934 }
  1938 }
  1935 
  1939 
  1936 const char* os::get_current_directory(char *buf, int buflen) {
  1940 const char* os::get_current_directory(char *buf, int buflen) {
  1937   return getcwd(buf, buflen);
  1941   return getcwd(buf, buflen);
  1938 }
  1942 }