Branch
Hash :
5a2d28df
Author :
Date :
2025-01-13T10:17:21
fts, savedir: avoid glibc 2.2 readdir ENOENT bug This is mostly to document the bug. If these old platforms were still common I suppose we should change the readdir module to work around it. However, I’m not sure it’s worth the hassle at this point. * doc/posix-functions/readdir.texi, doc/posix-functions/readdir_r.texi: Document the bug. * lib/fts.c (fts_build): * lib/savedir.c (streamsavedir): Work around it.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
@node readdir
@subsection @code{readdir}
@findex readdir
POSIX specification:@* @url{https://pubs.opengroup.org/onlinepubs/9799919799/functions/readdir.html}
Gnulib module: readdir
@mindex readdir
Portability problems fixed by Gnulib:
@itemize
@item
This function is missing on some platforms:
MSVC 14.
@item
On platforms where @code{off_t} is a 32-bit type, this function may not
work correctly on huge directories 2 GiB and larger. Also, on platforms
where @code{ino_t} is a 32-bit type, this function may report inode numbers
incorrectly. This can occur with file systems such as XFS (typically on
large disks) and NFS@. @xref{Large File Support}.
@end itemize
Portability problems not fixed by Gnulib:
@itemize
@item
Although POSIX places no restrictions on @code{d_ino} values, some
older systems are rumored to return @code{d_ino} values equal to zero
for directory entries that do not really exist. Although Gnulib
formerly attempted to cater to these older systems, this caused
misbehavior on standard systems and so Gnulib does not attempt to
cater to them any more. If you know of any problems caused by this,
please send a bug report.
@item
When reading a directory that has been removed,
this function sets @code{errno} to @code{ENOENT}
instead of leaving @code{errno} alone to indicate EOF:
glibc 2.2.5.
@end itemize