diff options
author | Kay Sievers <kay@vrfy.org> | 2013-02-08 10:45:30 +0100 |
---|---|---|
committer | Kay Sievers <kay@vrfy.org> | 2013-02-08 11:52:10 +0100 |
commit | e02caf30ac6ed2e14f2e6c7f237fde2a3a7acf5d (patch) | |
tree | 7a398395df7251f4b697ef6da484fe40ceb812df /src/shared/conf-files.c | |
parent | 7850b3b83791ba0e2377ba40383c5abc258b839d (diff) |
shared: conf-files - use root parameter and convert to auto-cleanup
Diffstat (limited to 'src/shared/conf-files.c')
-rw-r--r-- | src/shared/conf-files.c | 29 |
1 files changed, 13 insertions, 16 deletions
diff --git a/src/shared/conf-files.c b/src/shared/conf-files.c index 368b7bf6bb..5bbd2388d3 100644 --- a/src/shared/conf-files.c +++ b/src/shared/conf-files.c @@ -38,10 +38,13 @@ #include "conf-files.h" static int files_add(Hashmap *h, const char *root, const char *path, const char *suffix) { - DIR *dir; - int r = 0; + _cleanup_closedir_ DIR *dir; + _cleanup_free_ char *dirpath = NULL; - dir = opendir(path); + if (asprintf(&dirpath, "%s%s", root ? root : "", path) < 0) + return -ENOMEM; + + dir = opendir(dirpath); if (!dir) { if (errno == ENOENT) return 0; @@ -51,14 +54,12 @@ static int files_add(Hashmap *h, const char *root, const char *path, const char for (;;) { struct dirent *de; union dirent_storage buf; - int k; char *p; + int err; - k = readdir_r(dir, &buf.de, &de); - if (k != 0) { - r = -k; - goto finish; - } + err = readdir_r(dir, &buf.de, &de); + if (err != 0) + return err; if (!de) break; @@ -66,10 +67,8 @@ static int files_add(Hashmap *h, const char *root, const char *path, const char if (!dirent_is_file_with_suffix(de, suffix)) continue; - if (asprintf(&p, "%s/%s", path, de->d_name) < 0) { - r = -ENOMEM; - goto finish; - } + if (asprintf(&p, "%s/%s", dirpath, de->d_name) < 0) + return -ENOMEM; if (hashmap_put(h, path_get_file_name(p), p) <= 0) { log_debug("Skip overridden file: %s.", p); @@ -77,9 +76,7 @@ static int files_add(Hashmap *h, const char *root, const char *path, const char } } -finish: - closedir(dir); - return r; + return 0; } static int base_cmp(const void *a, const void *b) { |