From f782b8d031fcf6ec6b6ea4a1e0c956e44a7c7298 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Fri, 22 Jul 2011 04:25:25 +0200 Subject: [PATCH] util: use readdir_r() instead of readdir() --- src/util.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/util.c b/src/util.c index 4e441a7db..328a1ead9 100644 --- a/src/util.c +++ b/src/util.c @@ -4801,7 +4801,7 @@ static int file_is_conf(const struct dirent *d, const char *suffix) { static int files_add(Hashmap *h, const char *path, const char *suffix) { DIR *dir; - struct dirent *de; + struct dirent buffer, *de; int r = 0; dir = opendir(path); @@ -4811,9 +4811,18 @@ static int files_add(Hashmap *h, const char *path, const char *suffix) { return -errno; } - for (de = readdir(dir); de; de = readdir(dir)) { + for (;;) { + int k; char *p, *f; - const char *base; + + k = readdir_r(dir, &buffer, &de); + if (k != 0) { + r = -k; + goto finish; + } + + if (!de) + break; if (!file_is_conf(de, suffix)) continue; @@ -4832,8 +4841,7 @@ static int files_add(Hashmap *h, const char *path, const char *suffix) { free(p); log_debug("found: %s\n", f); - base = f + strlen(path) + 1; - if (hashmap_put(h, base, f) <= 0) + if (hashmap_put(h, file_name_from_path(f), f) <= 0) free(f); } -- 2.30.2