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 } |