From c8f7eca0eb6327e8b8ea066af55183a135818fe1 Mon Sep 17 00:00:00 2001 From: Tavian Barnes Date: Sun, 23 Jun 2019 10:07:49 -0400 Subject: util: Filter out . and .. in xreaddir() --- util.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) (limited to 'util.c') diff --git a/util.c b/util.c index 2a01af1..01fb1ae 100644 --- a/util.c +++ b/util.c @@ -41,12 +41,20 @@ #endif int xreaddir(DIR *dir, struct dirent **de) { - errno = 0; - *de = readdir(dir); - if (!*de && errno != 0) { - return -1; - } else { - return 0; + while (true) { + errno = 0; + *de = readdir(dir); + + if (*de) { + const char *name = (*de)->d_name; + if (name[0] != '.' || (name[1] != '\0' && (name[1] != '.' || name[2] != '\0'))) { + return 0; + } + } else if (errno != 0) { + return -1; + } else { + return 0; + } } } -- cgit v1.2.3