X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Ftmpfiles%2Ftmpfiles.c;h=c6121bccf3641fb25a43dc9fd79b4194fe00bcd5;hb=1910cd0e05f7661986680e0a4472f4e857f90787;hp=d68693f829589d9c8b1c9596cc1a1221ef35e68f;hpb=7bc040fab802ff20eacd1745e393f1766c8c35d9;p=elogind.git diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c index d68693f82..c6121bccf 100644 --- a/src/tmpfiles/tmpfiles.c +++ b/src/tmpfiles/tmpfiles.c @@ -101,6 +101,8 @@ typedef struct Item { bool age_set:1; bool keep_first_level:1; + + bool done:1; } Item; static bool arg_create = false; @@ -977,9 +979,23 @@ static int clean_item(Item *i) { static int process_item(Item *i) { int r, q, p; + char prefix[PATH_MAX]; assert(i); + if (i->done) + return 0; + + i->done = true; + + PATH_FOREACH_PREFIX(prefix, i->path) { + Item *j; + + j = hashmap_get(items, prefix); + if (j) + process_item(j); + } + r = arg_create ? create_item(i) : 0; q = arg_remove ? remove_item(i) : 0; p = arg_clean ? clean_item(i) : 0;