chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
tmpfiles: when processing lines, always process prefixes before suffixes
[elogind.git]
/
src
/
tmpfiles
/
tmpfiles.c
diff --git
a/src/tmpfiles/tmpfiles.c
b/src/tmpfiles/tmpfiles.c
index d68693f829589d9c8b1c9596cc1a1221ef35e68f..c6121bccf3641fb25a43dc9fd79b4194fe00bcd5 100644
(file)
--- 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 age_set:1;
bool keep_first_level:1;
+
+ bool done:1;
} Item;
static bool arg_create = false;
} 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;
static int process_item(Item *i) {
int r, q, p;
+ char prefix[PATH_MAX];
assert(i);
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;
r = arg_create ? create_item(i) : 0;
q = arg_remove ? remove_item(i) : 0;
p = arg_clean ? clean_item(i) : 0;