diff --git a/lib/fts.c b/lib/fts.c index bcdcff9..42863fe 100644 --- a/lib/fts.c +++ b/lib/fts.c @@ -1461,9 +1461,20 @@ fts_build (register FTS *sp, int type) while (cur->fts_dirp) { bool is_dir; size_t d_namelen; + __set_errno (0); struct dirent *dp = readdir(cur->fts_dirp); - if (dp == NULL) + if (dp == NULL) { + if (errno) { + saved_errno = errno; + fts_lfree(head); + closedir_and_clear(cur->fts_dirp); + cur->fts_info = FTS_ERR; + SET(FTS_STOP); + __set_errno (saved_errno); + return (NULL); + } break; + } if (!ISSET(FTS_SEEDOT) && ISDOT(dp->d_name)) continue;