forked from OSchip/llvm-project
[Support] PR42623: Avoid setting the delete-on-close bit if a TempFile doesn't reside on a local drive
On Windows, after commit 881ba10465
, tools
using TempFile would error with "bad file descriptor" when writing the
file on a network drive. It appears that setting the delete-on-close bit via
SetFileInformationByHandle/FileDispositionInfo prevented it from
accessing the file on network drives, and although using
FILE_DISPOSITION_INFO seems to work, it causes other troubles.
Differential Revision: https://reviews.llvm.org/D81803
This commit is contained in:
parent
84e8257937
commit
79657e2339
|
@ -402,6 +402,20 @@ std::error_code is_local(int FD, bool &Result) {
|
|||
}
|
||||
|
||||
static std::error_code setDeleteDisposition(HANDLE Handle, bool Delete) {
|
||||
// First, check if the file is on a network (non-local) drive. If so, don't
|
||||
// set DeleteFile to true, since it prevents opening the file for writes.
|
||||
SmallVector<wchar_t, 128> FinalPath;
|
||||
if (std::error_code EC = realPathFromHandle(Handle, FinalPath))
|
||||
return EC;
|
||||
|
||||
bool IsLocal;
|
||||
if (std::error_code EC = is_local_internal(FinalPath, IsLocal))
|
||||
return EC;
|
||||
|
||||
if (!IsLocal)
|
||||
return std::error_code();
|
||||
|
||||
// The file is on a local drive, set the DeleteFile to true.
|
||||
FILE_DISPOSITION_INFO Disposition;
|
||||
Disposition.DeleteFile = Delete;
|
||||
if (!SetFileInformationByHandle(Handle, FileDispositionInfo, &Disposition,
|
||||
|
|
Loading…
Reference in New Issue