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:
Xavier Del Campo Romero 2023-07-06 01:56:43 +02:00
parent 36ff7d8143
commit 74b7f7a902
Signed by: xavi
GPG Key ID: 84FF3612A9BF43F2
1 changed files with 12 additions and 2 deletions

14
cftw.c
View File

@ -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, ".."))