readdir may not modify errno at EOF
Andreas Schwab
schwab@suse.de
Wed May 9 09:22:00 GMT 2001
When readdir returns NULL it is supposed to keep errno unmodified when EOF
was reached (and no error occured). But __getdents may be changing it
even when sucessfull, so we need to save its value around the call.
Andreas.
2001-05-09 Andreas Schwab <schwab@suse.de>
* sysdeps/unix/readdir.c: Make sure we don't modify errno when we
reached EOF.
--- sysdeps/unix/readdir.c.~1.18.~ Mon Aug 14 12:07:29 2000
+++ sysdeps/unix/readdir.c Wed May 9 14:14:03 2001
@@ -39,6 +39,7 @@
__READDIR (DIR *dirp)
{
DIRENT_TYPE *dp;
+ int saved_errno = errno;
__libc_lock_lock (dirp->lock);
@@ -63,6 +64,9 @@
bytes = __GETDENTS (dirp->fd, dirp->data, maxread);
if (bytes <= 0)
{
+ /* Don't modifiy errno when reaching EOF. */
+ if (bytes == 0)
+ __set_errno (saved_errno);
dp = NULL;
break;
}
--
Andreas Schwab "And now for something
SuSE Labs completely different."
Andreas.Schwab@suse.de
SuSE GmbH, Schanzäckerstr. 10, D-90443 Nürnberg
Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5
More information about the Libc-hacker
mailing list