diff options
author | Lennart Poettering <lennart@poettering.net> | 2011-07-22 04:25:25 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2011-07-22 04:31:21 +0200 |
commit | f782b8d031fcf6ec6b6ea4a1e0c956e44a7c7298 (patch) | |
tree | c774a145f2a51fc7833017f802e75dc86cb74031 /src/util.c | |
parent | 830964834f330836b9d33752e83de09d4f38da87 (diff) |
util: use readdir_r() instead of readdir()
Diffstat (limited to 'src/util.c')
-rw-r--r-- | src/util.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/src/util.c b/src/util.c index 4e441a7dbe..328a1ead92 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); } |