Mercurial > hg > truffle
comparison src/os/linux/vm/os_linux.cpp @ 6988:2cb439954abf
Merge with http://hg.openjdk.java.net/hsx/hsx25/hotspot/
author | Gilles Duboscq <duboscq@ssw.jku.at> |
---|---|
date | Mon, 19 Nov 2012 15:36:13 +0100 |
parents | e522a00b91aa 6cb0d32b828b |
children | 291ffc492eb6 |
comparison
equal
deleted
inserted
replaced
6963:dd0dd0321e2a | 6988:2cb439954abf |
---|---|
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 } |