hotspot/src/os/linux/vm/os_linux.cpp
changeset 14471 f3a6b82e25cf
parent 13932 b8d718f01df4
child 14626 0cf4eccf130f
child 14583 d70ee55535f4
equal deleted inserted replaced
14383:f31aacbd0f36 14471:f3a6b82e25cf
  1648     return false;
  1648     return false;
  1649   }
  1649   }
  1650   return os::stat(filename, &statbuf) == 0;
  1650   return os::stat(filename, &statbuf) == 0;
  1651 }
  1651 }
  1652 
  1652 
  1653 void os::dll_build_name(char* buffer, size_t buflen,
  1653 bool os::dll_build_name(char* buffer, size_t buflen,
  1654                         const char* pname, const char* fname) {
  1654                         const char* pname, const char* fname) {
       
  1655   bool retval = false;
  1655   // Copied from libhpi
  1656   // Copied from libhpi
  1656   const size_t pnamelen = pname ? strlen(pname) : 0;
  1657   const size_t pnamelen = pname ? strlen(pname) : 0;
  1657 
  1658 
  1658   // Quietly truncate on buffer overflow.  Should be an error.
  1659   // Return error on buffer overflow.
  1659   if (pnamelen + strlen(fname) + 10 > (size_t) buflen) {
  1660   if (pnamelen + strlen(fname) + 10 > (size_t) buflen) {
  1660       *buffer = '\0';
  1661     return retval;
  1661       return;
       
  1662   }
  1662   }
  1663 
  1663 
  1664   if (pnamelen == 0) {
  1664   if (pnamelen == 0) {
  1665     snprintf(buffer, buflen, "lib%s.so", fname);
  1665     snprintf(buffer, buflen, "lib%s.so", fname);
       
  1666     retval = true;
  1666   } else if (strchr(pname, *os::path_separator()) != NULL) {
  1667   } else if (strchr(pname, *os::path_separator()) != NULL) {
  1667     int n;
  1668     int n;
  1668     char** pelements = split_path(pname, &n);
  1669     char** pelements = split_path(pname, &n);
  1669     for (int i = 0 ; i < n ; i++) {
  1670     for (int i = 0 ; i < n ; i++) {
  1670       // Really shouldn't be NULL, but check can't hurt
  1671       // Really shouldn't be NULL, but check can't hurt
  1671       if (pelements[i] == NULL || strlen(pelements[i]) == 0) {
  1672       if (pelements[i] == NULL || strlen(pelements[i]) == 0) {
  1672         continue; // skip the empty path values
  1673         continue; // skip the empty path values
  1673       }
  1674       }
  1674       snprintf(buffer, buflen, "%s/lib%s.so", pelements[i], fname);
  1675       snprintf(buffer, buflen, "%s/lib%s.so", pelements[i], fname);
  1675       if (file_exists(buffer)) {
  1676       if (file_exists(buffer)) {
       
  1677         retval = true;
  1676         break;
  1678         break;
  1677       }
  1679       }
  1678     }
  1680     }
  1679     // release the storage
  1681     // release the storage
  1680     for (int i = 0 ; i < n ; i++) {
  1682     for (int i = 0 ; i < n ; i++) {
  1685     if (pelements != NULL) {
  1687     if (pelements != NULL) {
  1686       FREE_C_HEAP_ARRAY(char*, pelements, mtInternal);
  1688       FREE_C_HEAP_ARRAY(char*, pelements, mtInternal);
  1687     }
  1689     }
  1688   } else {
  1690   } else {
  1689     snprintf(buffer, buflen, "%s/lib%s.so", pname, fname);
  1691     snprintf(buffer, buflen, "%s/lib%s.so", pname, fname);
  1690   }
  1692     retval = true;
       
  1693   }
       
  1694   return retval;
  1691 }
  1695 }
  1692 
  1696 
  1693 const char* os::get_current_directory(char *buf, int buflen) {
  1697 const char* os::get_current_directory(char *buf, int buflen) {
  1694   return getcwd(buf, buflen);
  1698   return getcwd(buf, buflen);
  1695 }
  1699 }