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