; * src/w32.c (sys_open): Set errno to EISDIR if opening a directory.

This commit is contained in:
Eli Zaretskii 2024-05-29 17:56:18 +03:00
parent 8f618711d1
commit 4e836407ce

View file

@ -4652,6 +4652,14 @@ sys_open (const char * path, int oflag, int mode)
res = _wopen (mpath_w, (oflag & ~_O_CREAT) | _O_NOINHERIT, mode);
if (res < 0)
res = _wopen (mpath_w, oflag | _O_NOINHERIT, mode);
if (res < 0 && errno == EACCES)
{
DWORD attributes = GetFileAttributesW (mpath_w);
if (attributes != INVALID_FILE_ATTRIBUTES
&& (attributes & FILE_ATTRIBUTE_DIRECTORY) != 0)
errno = EISDIR;
}
}
else
{
@ -4662,6 +4670,14 @@ sys_open (const char * path, int oflag, int mode)
res = _open (mpath_a, (oflag & ~_O_CREAT) | _O_NOINHERIT, mode);
if (res < 0)
res = _open (mpath_a, oflag | _O_NOINHERIT, mode);
if (res < 0 && errno == EACCES)
{
DWORD attributes = GetFileAttributesA (mpath_a);
if (attributes != INVALID_FILE_ATTRIBUTES
&& (attributes & FILE_ATTRIBUTE_DIRECTORY) != 0)
errno = EISDIR;
}
}
return res;