diff options
author | Michal Schmidt <mschmidt@redhat.com> | 2011-12-15 23:45:26 +0100 |
---|---|---|
committer | Michal Schmidt <mschmidt@redhat.com> | 2011-12-15 23:58:55 +0100 |
commit | 99e68c0b2d6ca9d491036920fcbca4c8d54404a8 (patch) | |
tree | 11a4b3965dedae79020be4b9111fa9a88d150ba1 /src/tmpfiles.c | |
parent | f05bc3f7f1d85ce4d31fa9c9b2780797ef3953cd (diff) |
tmpfiles: separate a generic item glob processing function
Item glob processing will be useful for more than just removing.
Diffstat (limited to 'src/tmpfiles.c')
-rw-r--r-- | src/tmpfiles.c | 60 |
1 files changed, 33 insertions, 27 deletions
diff --git a/src/tmpfiles.c b/src/tmpfiles.c index 9d07a2a554..d655bc3594 100644 --- a/src/tmpfiles.c +++ b/src/tmpfiles.c @@ -405,6 +405,33 @@ finish: return r; } +static int glob_item(Item *i, int (*action)(Item *, const char *)) { + int r = 0, k; + glob_t g; + char **fn; + + zero(g); + + errno = 0; + if ((k = glob(i->path, GLOB_NOSORT|GLOB_BRACE, NULL, &g)) != 0) { + + if (k != GLOB_NOMATCH) { + if (errno != 0) + errno = EIO; + + log_error("glob(%s) failed: %m", i->path); + return -errno; + } + } + + STRV_FOREACH(fn, g.gl_pathv) + if ((k = action(i, *fn)) < 0) + r = k; + + globfree(&g); + return r; +} + static int item_set_perms(Item *i) { if (i->mode_set) if (chmod(i->path, i->mode) < 0) { @@ -570,6 +597,8 @@ static int remove_item_instance(Item *i, const char *instance) { } static int remove_item(Item *i) { + int r = 0; + assert(i); switch (i->type) { @@ -583,35 +612,12 @@ static int remove_item(Item *i) { case REMOVE_PATH: case TRUNCATE_DIRECTORY: - case RECURSIVE_REMOVE_PATH: { - int r = 0, k; - glob_t g; - char **fn; - - zero(g); - - errno = 0; - if ((k = glob(i->path, GLOB_NOSORT|GLOB_BRACE, NULL, &g)) != 0) { - - if (k != GLOB_NOMATCH) { - if (errno != 0) - errno = EIO; - - log_error("glob(%s) failed: %m", i->path); - return -errno; - } - } - - STRV_FOREACH(fn, g.gl_pathv) - if ((k = remove_item_instance(i, *fn)) < 0) - r = k; - - globfree(&g); - return r; - } + case RECURSIVE_REMOVE_PATH: + r = glob_item(i, remove_item_instance); + break; } - return 0; + return r; } static int process_item(Item *i) { |