]> granicus.if.org Git - llvm/commitdiff
Work around lack of Wine support for SetFileInformationByHandle harder
authorHans Wennborg <hans@hanshq.net>
Thu, 12 Oct 2017 17:38:22 +0000 (17:38 +0000)
committerHans Wennborg <hans@hanshq.net>
Thu, 12 Oct 2017 17:38:22 +0000 (17:38 +0000)
In r315079 I added a check for the ERROR_CALL_NOT_IMPLEMENTED error
code, but it turns out earlier versions of Wine just returned false
without setting any error code.

This patch handles the unset error code case.

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

lib/Support/Windows/Path.inc

index 5866f9a403a80679fb71467948c37d09919f5768..31462633ee83773a72e6f8c5764ca689bb91bfaf 100644 (file)
@@ -377,9 +377,14 @@ static std::error_code rename_internal(HANDLE FromHandle, const Twine &To,
   RenameInfo.FileNameLength = ToWide.size();
   std::copy(ToWide.begin(), ToWide.end(), &RenameInfo.FileName[0]);
 
+  SetLastError(ERROR_SUCCESS);
   if (!SetFileInformationByHandle(FromHandle, FileRenameInfo, &RenameInfo,
-                                  RenameInfoBuf.size()))
-    return mapWindowsError(GetLastError());
+                                  RenameInfoBuf.size())) {
+    unsigned Error = GetLastError();
+    if (Error == ERROR_SUCCESS)
+      Error = ERROR_CALL_NOT_IMPLEMENTED; // Wine doesn't always set error code.
+    return mapWindowsError(Error);
+  }
 
   return std::error_code();
 }