Skip to content

Commit 388b07c

Browse files
naatje80Git for Windows Build Agent
authored and
Git for Windows Build Agent
committed
mingw: cope with the Isilon network file system
On certain network filesystems (currently encounterd with Isilon, but in theory more network storage solutions could be causing the same issue), when the directory in question is missing, `raceproof_create_file()` fails with an `ERROR_INVALID_PARAMETER` instead of an `ERROR_PATH_NOT_FOUND`. Since it is highly unlikely that we produce such an error by mistake (the parameters we pass are fairly benign), we can be relatively certain that the directory is missing in this instance. So let's just translate that error automagically. This fixes #1345. Signed-off-by: Nathan Sanders <[email protected]> Signed-off-by: Johannes Schindelin <[email protected]>
1 parent 6a5a0dd commit 388b07c

File tree

1 file changed

+13
-2
lines changed

1 file changed

+13
-2
lines changed

compat/mingw.c

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -460,8 +460,19 @@ static int mingw_open_append(wchar_t const *wfilename, int oflags, ...)
460460
handle = CreateFileW(wfilename, FILE_APPEND_DATA,
461461
FILE_SHARE_WRITE | FILE_SHARE_READ,
462462
NULL, create, FILE_ATTRIBUTE_NORMAL, NULL);
463-
if (handle == INVALID_HANDLE_VALUE)
464-
return errno = err_win_to_posix(GetLastError()), -1;
463+
if (handle == INVALID_HANDLE_VALUE) {
464+
DWORD err = GetLastError();
465+
/*
466+
* Some network storage solutions (e.g. Isilon) might return
467+
* ERROR_INVALID_PARAMETER instead of expected error
468+
* ERROR_PATH_NOT_FOUND, which results in a unknow error. If
469+
* so, the error is now forced to be an ERROR_PATH_NOT_FOUND
470+
* error instead.
471+
*/
472+
if (err == ERROR_INVALID_PARAMETER)
473+
err = ERROR_PATH_NOT_FOUND;
474+
return errno = err_win_to_posix(err), -1;
475+
}
465476

466477
/*
467478
* No O_APPEND here, because the CRT uses it only to reset the

0 commit comments

Comments
 (0)