On Saturday 17 January 2026 16:39:00 Pali Rohár wrote:
> On Saturday 17 January 2026 12:53:28 Pali Rohár wrote:
> > On Thursday 15 January 2026 11:21:05 LIU Hao wrote:
> > > 在 2025-12-20 00:38, Pali Rohár 写道:
> > > > msvcrt _fstat function is broken and for directory fd it returns S_ISREG
> > > > type. 32-bit pre-msvcr110 _fstat does not properly signal size overflow.
> > > > UCRT seems to work correctly.
> > > > 
> > > > Add mingw-w64 fstat wrappers around msvcrt _fstat functions which change
> > > > S_IFMT to S_IFDIR if winapi filehandle has FILE_ATTRIBUTE_DIRECTORY
> > > > attribute set. Provide wrapper for all 4 fstat size_t/time_t variants.
> > > > For 32-bit pre-msvcr110 builds, adds similar workaround like for 
> > > > existing
> > > > mingw-w64 stat functions.
> > > > 
> > > 
> > > How would you obtain an FD of a directory? `_open("C:/Windows", 
> > > _O_RDONLY)` fails with EPERM.
> > 
> > I know two options:
> > 
> > - for msvcr110, msvcr120 and UCRT builds via _open() with _O_OBTAIN_DIR 
> > flag:
> >   https://godbolt.org/z/9fon7zY1q
> > 
> > - for any build via WinAPI CreateFile() with FILE_FLAG_BACKUP_SEMANTICS flag
> >   followed by the CRT _open_osfhandle() call:
> >   https://godbolt.org/z/b68rnssYP
> > 
> > Seems that mingw-w64 does not define _O_OBTAIN_DIR flag in header files.
> > But as can be seen on the godbolt, it works with msvc. Second option
> > works also with mingw-w64.
> > 
> > _O_OBTAIN_DIR is not mentioned in the _open documentation:
> > https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/open-wopen
> > 
> > But FILE_FLAG_BACKUP_SEMANTICS is documented as a way how to obtain a 
> > handle to a directory:
> > https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfilea
> 
> Anyway, the change itself contains the automated test via the
> _open_osfhandle which obtains directory FD and which check that fstat
> correctly signals the S_IFDIR type.

Hello, is there some other issues with this fstat change?


_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to