1130 return false; |
1130 return false; |
1131 } |
1131 } |
1132 return GetFileAttributes(filename) != INVALID_FILE_ATTRIBUTES; |
1132 return GetFileAttributes(filename) != INVALID_FILE_ATTRIBUTES; |
1133 } |
1133 } |
1134 |
1134 |
1135 void os::dll_build_name(char *buffer, size_t buflen, |
1135 bool os::dll_build_name(char *buffer, size_t buflen, |
1136 const char* pname, const char* fname) { |
1136 const char* pname, const char* fname) { |
|
1137 bool retval = false; |
1137 const size_t pnamelen = pname ? strlen(pname) : 0; |
1138 const size_t pnamelen = pname ? strlen(pname) : 0; |
1138 const char c = (pnamelen > 0) ? pname[pnamelen-1] : 0; |
1139 const char c = (pnamelen > 0) ? pname[pnamelen-1] : 0; |
1139 |
1140 |
1140 // Quietly truncates on buffer overflow. Should be an error. |
1141 // Return error on buffer overflow. |
1141 if (pnamelen + strlen(fname) + 10 > buflen) { |
1142 if (pnamelen + strlen(fname) + 10 > buflen) { |
1142 *buffer = '\0'; |
1143 return retval; |
1143 return; |
|
1144 } |
1144 } |
1145 |
1145 |
1146 if (pnamelen == 0) { |
1146 if (pnamelen == 0) { |
1147 jio_snprintf(buffer, buflen, "%s.dll", fname); |
1147 jio_snprintf(buffer, buflen, "%s.dll", fname); |
|
1148 retval = true; |
1148 } else if (c == ':' || c == '\\') { |
1149 } else if (c == ':' || c == '\\') { |
1149 jio_snprintf(buffer, buflen, "%s%s.dll", pname, fname); |
1150 jio_snprintf(buffer, buflen, "%s%s.dll", pname, fname); |
|
1151 retval = true; |
1150 } else if (strchr(pname, *os::path_separator()) != NULL) { |
1152 } else if (strchr(pname, *os::path_separator()) != NULL) { |
1151 int n; |
1153 int n; |
1152 char** pelements = split_path(pname, &n); |
1154 char** pelements = split_path(pname, &n); |
1153 for (int i = 0 ; i < n ; i++) { |
1155 for (int i = 0 ; i < n ; i++) { |
1154 char* path = pelements[i]; |
1156 char* path = pelements[i]; |
1162 jio_snprintf(buffer, buflen, "%s%s.dll", path, fname); |
1164 jio_snprintf(buffer, buflen, "%s%s.dll", path, fname); |
1163 } else { |
1165 } else { |
1164 jio_snprintf(buffer, buflen, "%s\\%s.dll", path, fname); |
1166 jio_snprintf(buffer, buflen, "%s\\%s.dll", path, fname); |
1165 } |
1167 } |
1166 if (file_exists(buffer)) { |
1168 if (file_exists(buffer)) { |
|
1169 retval = true; |
1167 break; |
1170 break; |
1168 } |
1171 } |
1169 } |
1172 } |
1170 // release the storage |
1173 // release the storage |
1171 for (int i = 0 ; i < n ; i++) { |
1174 for (int i = 0 ; i < n ; i++) { |
1176 if (pelements != NULL) { |
1179 if (pelements != NULL) { |
1177 FREE_C_HEAP_ARRAY(char*, pelements, mtInternal); |
1180 FREE_C_HEAP_ARRAY(char*, pelements, mtInternal); |
1178 } |
1181 } |
1179 } else { |
1182 } else { |
1180 jio_snprintf(buffer, buflen, "%s\\%s.dll", pname, fname); |
1183 jio_snprintf(buffer, buflen, "%s\\%s.dll", pname, fname); |
1181 } |
1184 retval = true; |
|
1185 } |
|
1186 return retval; |
1182 } |
1187 } |
1183 |
1188 |
1184 // Needs to be in os specific directory because windows requires another |
1189 // Needs to be in os specific directory because windows requires another |
1185 // header file <direct.h> |
1190 // header file <direct.h> |
1186 const char* os::get_current_directory(char *buf, int buflen) { |
1191 const char* os::get_current_directory(char *buf, int buflen) { |