Mercurial > hg > graal-jvmci-8
comparison src/os/linux/vm/os_linux.cpp @ 691:956304450e80
6819213: revive sun.boot.library.path
Summary: Support multiplex and mutable sun.boot.library.path
Reviewed-by: acorn, dcubed, xlu
author | phh |
---|---|
date | Wed, 01 Apr 2009 16:38:01 -0400 |
parents | 6bdd6923ba16 |
children | 622212a69394 |
comparison
equal
deleted
inserted
replaced
690:d142f1feeed5 | 691:956304450e80 |
---|---|
1516 | 1516 |
1517 const char* os::dll_file_extension() { return ".so"; } | 1517 const char* os::dll_file_extension() { return ".so"; } |
1518 | 1518 |
1519 const char* os::get_temp_directory() { return "/tmp/"; } | 1519 const char* os::get_temp_directory() { return "/tmp/"; } |
1520 | 1520 |
1521 void os::dll_build_name( | 1521 static bool file_exists(const char* filename) { |
1522 char* buffer, size_t buflen, const char* pname, const char* fname) { | 1522 struct stat statbuf; |
1523 // copied from libhpi | 1523 if (filename == NULL || strlen(filename) == 0) { |
1524 return false; | |
1525 } | |
1526 return os::stat(filename, &statbuf) == 0; | |
1527 } | |
1528 | |
1529 void os::dll_build_name(char* buffer, size_t buflen, | |
1530 const char* pname, const char* fname) { | |
1531 // Copied from libhpi | |
1524 const size_t pnamelen = pname ? strlen(pname) : 0; | 1532 const size_t pnamelen = pname ? strlen(pname) : 0; |
1525 | 1533 |
1526 /* Quietly truncate on buffer overflow. Should be an error. */ | 1534 // Quietly truncate on buffer overflow. Should be an error. |
1527 if (pnamelen + strlen(fname) + 10 > (size_t) buflen) { | 1535 if (pnamelen + strlen(fname) + 10 > (size_t) buflen) { |
1528 *buffer = '\0'; | 1536 *buffer = '\0'; |
1529 return; | 1537 return; |
1530 } | 1538 } |
1531 | 1539 |
1532 if (pnamelen == 0) { | 1540 if (pnamelen == 0) { |
1533 sprintf(buffer, "lib%s.so", fname); | 1541 snprintf(buffer, buflen, "lib%s.so", fname); |
1542 } else if (strchr(pname, *os::path_separator()) != NULL) { | |
1543 int n; | |
1544 char** pelements = split_path(pname, &n); | |
1545 for (int i = 0 ; i < n ; i++) { | |
1546 // Really shouldn't be NULL, but check can't hurt | |
1547 if (pelements[i] == NULL || strlen(pelements[i]) == 0) { | |
1548 continue; // skip the empty path values | |
1549 } | |
1550 snprintf(buffer, buflen, "%s/lib%s.so", pelements[i], fname); | |
1551 if (file_exists(buffer)) { | |
1552 break; | |
1553 } | |
1554 } | |
1555 // release the storage | |
1556 for (int i = 0 ; i < n ; i++) { | |
1557 if (pelements[i] != NULL) { | |
1558 FREE_C_HEAP_ARRAY(char, pelements[i]); | |
1559 } | |
1560 } | |
1561 if (pelements != NULL) { | |
1562 FREE_C_HEAP_ARRAY(char*, pelements); | |
1563 } | |
1534 } else { | 1564 } else { |
1535 sprintf(buffer, "%s/lib%s.so", pname, fname); | 1565 snprintf(buffer, buflen, "%s/lib%s.so", pname, fname); |
1536 } | 1566 } |
1537 } | 1567 } |
1538 | 1568 |
1539 const char* os::get_current_directory(char *buf, int buflen) { | 1569 const char* os::get_current_directory(char *buf, int buflen) { |
1540 return getcwd(buf, buflen); | 1570 return getcwd(buf, buflen); |