chiark / gitweb /
tmpfiles: when processing lines, always process prefixes before suffixes
[elogind.git] / src / tmpfiles / tmpfiles.c
index d68693f829589d9c8b1c9596cc1a1221ef35e68f..c6121bccf3641fb25a43dc9fd79b4194fe00bcd5 100644 (file)
@@ -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;