|
|
|
@ -460,8 +460,21 @@ static int mingw_open_append(wchar_t const *wfilename, int oflags, ...)
@@ -460,8 +460,21 @@ static int mingw_open_append(wchar_t const *wfilename, int oflags, ...)
|
|
|
|
|
handle = CreateFileW(wfilename, FILE_APPEND_DATA, |
|
|
|
|
FILE_SHARE_WRITE | FILE_SHARE_READ, |
|
|
|
|
NULL, create, FILE_ATTRIBUTE_NORMAL, NULL); |
|
|
|
|
if (handle == INVALID_HANDLE_VALUE) |
|
|
|
|
return errno = err_win_to_posix(GetLastError()), -1; |
|
|
|
|
if (handle == INVALID_HANDLE_VALUE) { |
|
|
|
|
DWORD err = GetLastError(); |
|
|
|
|
|
|
|
|
|
/* |
|
|
|
|
* Some network storage solutions (e.g. Isilon) might return |
|
|
|
|
* ERROR_INVALID_PARAMETER instead of expected error |
|
|
|
|
* ERROR_PATH_NOT_FOUND, which results in an unknown error. If |
|
|
|
|
* so, let's turn the error to ERROR_PATH_NOT_FOUND instead. |
|
|
|
|
*/ |
|
|
|
|
if (err == ERROR_INVALID_PARAMETER) |
|
|
|
|
err = ERROR_PATH_NOT_FOUND; |
|
|
|
|
|
|
|
|
|
errno = err_win_to_posix(err); |
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* |
|
|
|
|
* No O_APPEND here, because the CRT uses it only to reset the |
|
|
|
|