chiark / gitweb /
tmpfiles: finish with EXIT_FAILURE if anything failed
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Tue, 6 Jan 2015 14:53:12 +0000 (09:53 -0500)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Tue, 6 Jan 2015 14:57:40 +0000 (09:57 -0500)
Return value is successful only if everything succeeded.

src/tmpfiles/tmpfiles.c

index f5b32c2ba832387d4dffe81d2f0f17503a5bf5b5..ea1d11c4259f79bb0092a28e613c4ee7e13566d3 100644 (file)
@@ -1123,7 +1123,7 @@ static int clean_item(Item *i) {
 }
 
 static int process_item(Item *i) {
 }
 
 static int process_item(Item *i) {
-        int r, q, p;
+        int r, q, p, s, t = 0;
         _cleanup_free_ char *prefix = NULL;
 
         assert(i);
         _cleanup_free_ char *prefix = NULL;
 
         assert(i);
@@ -1141,21 +1141,23 @@ static int process_item(Item *i) {
                 Item *j;
 
                 j = hashmap_get(items, prefix);
                 Item *j;
 
                 j = hashmap_get(items, prefix);
-                if (j)
-                        process_item(j);
+                if (j) {
+                        int s;
+
+                        s = process_item(j);
+                        if (s < 0 && t == 0)
+                                t = s;
+                }
         }
 
         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;
 
-        if (r < 0)
-                return r;
-
-        if (q < 0)
-                return q;
-
-        return p;
+        return t < 0 ? t :
+                r < 0 ? r :
+                q < 0 ? q :
+                p;
 }
 
 static void item_free(Item *i) {
 }
 
 static void item_free(Item *i) {
@@ -1735,11 +1737,17 @@ int main(int argc, char *argv[]) {
                 }
         }
 
                 }
         }
 
-        HASHMAP_FOREACH(i, globs, iterator)
-                process_item(i);
+        HASHMAP_FOREACH(i, globs, iterator) {
+                k = process_item(i);
+                if (k < 0 && r == 0)
+                        r = k;
+        }
 
 
-        HASHMAP_FOREACH(i, items, iterator)
-                process_item(i);
+        HASHMAP_FOREACH(i, items, iterator) {
+                k = process_item(i);
+                if (k < 0 && r == 0)
+                        r = k;
+        }
 
 finish:
         while ((i = hashmap_steal_first(items)))
 
 finish:
         while ((i = hashmap_steal_first(items)))