Re: [PATCH v2] win32: explicitly set errno to enoent if err is not error_directory
- From
Johannes Sixt <j6t@kdbg.org>
- Date
- Dec 20, 2022, 07:21 UTC
- Message-ID
- <2c0c8ead-3942-6c44-b854-5980cff55755@kdbg.org>
- In-Reply-To
- <pull.1402.v2.git.git.1671466826159.gitgitgadget@gmail.com>
Am 19.12.22 um 17:20 schrieb Rose via GitGitGadget:
Show 10 quoted lines
> From: Seija Kijin <doremylover123@gmail.com> > > At this point, the only two possible errors are > ERROR_DIRECTORY or ERROR_BAD_PATHNAME. > > This code clarifies this and also saves a call to > err_win_to_posix. > > Signed-off-by: Seija Kijin <doremylover123@gmail.com> > ---
Show 17 quoted lines
> diff --git a/compat/win32/dirent.c b/compat/win32/dirent.c
> index 52420ec7d4d..8f94a5ab6db 100644
> --- a/compat/win32/dirent.c
> +++ b/compat/win32/dirent.c
> @@ -34,13 +34,13 @@ DIR *opendir(const char *name)
> if (len && !is_dir_sep(pattern[len - 1]))
> pattern[len++] = '/';
> pattern[len++] = '*';
> - pattern[len] = 0;
> + pattern[len] = '\0';
>
> /* open find handle */
> h = FindFirstFileW(pattern, &fdata);
> if (h == INVALID_HANDLE_VALUE) {
> DWORD err = GetLastError();
> - errno = (err == ERROR_DIRECTORY) ? ENOTDIR : err_win_to_posix(err);
> + errno = (err == ERROR_DIRECTORY) ? ENOTDIR : ENOENT;This change does not look correct. The documentation of FindFirstFileW()[*] does not give any guarantees that ERROR_DIRECTORY and ERROR_BAD_PATHNAME are the only possible error values. It is certainly not unthinkable that a hardware error is reported as ERROR_IO_DEVICE and should be translated to EIO.
[*] https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-findfirstfilew
-- Hannes