From 74b7f7a902d9916dddb07d6adb26c63e765a6349 Mon Sep 17 00:00:00 2001 From: Xavier Del Campo Romero Date: Thu, 6 Jul 2023 01:56:43 +0200 Subject: 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. --- cftw.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/cftw.c b/cftw.c index d11cb87..2990888 100644 --- a/cftw.c +++ b/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, "..")) -- cgit v1.2.3