cftw.c: Check errors from readdir(3)
According to POSIX.1-2017, applications are advised to assign errno(3) to 0 before a call to readdir(3), and compare errno(3) after the call to check for errors.
This commit is contained in:
parent
36ff7d8143
commit
74b7f7a902
14
cftw.c
14
cftw.c
|
@ -14,7 +14,6 @@ int cftw(const char *const dirpath, int (*const fn)(const char *,
|
|||
{
|
||||
int ret = -1;
|
||||
DIR *const d = opendir(dirpath);
|
||||
struct dirent *de;
|
||||
|
||||
if (!d)
|
||||
{
|
||||
|
@ -22,8 +21,19 @@ int cftw(const char *const dirpath, int (*const fn)(const char *,
|
|||
goto end;
|
||||
}
|
||||
|
||||
while ((de = readdir(d)))
|
||||
for (;;)
|
||||
{
|
||||
errno = 0;
|
||||
struct dirent *const de = readdir(d);
|
||||
|
||||
if (errno)
|
||||
{
|
||||
fprintf(stderr, "%s: readdir(3): %s\n", __func__, strerror(errno));
|
||||
goto end;
|
||||
}
|
||||
else if (!de)
|
||||
break;
|
||||
|
||||
const char *const path = de->d_name;
|
||||
|
||||
if (!strcmp(path, ".") || !strcmp(path, ".."))
|
||||
|
|
Loading…
Reference in New Issue