hotspot/src/os/windows/vm/os_windows.cpp
changeset 14471 f3a6b82e25cf
parent 14284 ceb386367065
child 14626 0cf4eccf130f
child 14583 d70ee55535f4
equal deleted inserted replaced
14383:f31aacbd0f36 14471:f3a6b82e25cf
  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) {