Small improvement to the use of GetFileType:
authorRafael Espindola <rafael.espindola@gmail.com>
Thu, 18 Jul 2013 18:42:52 +0000 (18:42 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Thu, 18 Jul 2013 18:42:52 +0000 (18:42 +0000)
* assert that the return value is one of the documented values on msdn.
* on FILE_TYPE_UNKNOWN, check GetLastError.

Unfortunately I can't think of a way to get a FILE_TYPE_UNKNOWN on a test.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186595 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Support/Windows/Path.inc

index 5d951425384870f6fd1b5a9f782f7235c0d39a83..dff89c74b16835a1dc51522e9b3cb53fc5f3f8a7 100644 (file)
@@ -581,7 +581,14 @@ static error_code getStatus(HANDLE FileHandle, file_status &Result) {
 
   switch (::GetFileType(FileHandle)) {
   default:
-  case FILE_TYPE_UNKNOWN:
+    llvm_unreachable("Don't know anything about this file type");
+  case FILE_TYPE_UNKNOWN: {
+    DWORD Err = ::GetLastError();
+    if (Err != NO_ERROR)
+      return windows_error(Err);
+    Result = file_status(file_type::type_unknown);
+    return error_code::success();
+  }
   case FILE_TYPE_DISK:
     break;
   case FILE_TYPE_CHAR: