chiark / gitweb /
update TODO
[elogind.git] / src / tmpfiles.c
index 1234cbf3480c9c1bc190dfdfe3c3a768cba0e66f..d242dac7dc0652f25e21d7778e3901915ed38180 100644 (file)
@@ -474,7 +474,7 @@ static void item_free(Item *i) {
 static int parse_line(const char *fname, unsigned line, const char *buffer, const char *prefix) {
         Item *i;
         char *mode = NULL, *user = NULL, *group = NULL, *age = NULL;
-        int r, n;
+        int r;
 
         assert(fname);
         assert(line >= 1);
@@ -485,19 +485,19 @@ static int parse_line(const char *fname, unsigned line, const char *buffer, cons
                 return -ENOMEM;
         }
 
-        if ((n = sscanf(buffer,
-                        "%c "
-                        "%ms "
-                        "%ms "
-                        "%ms "
-                        "%ms "
-                        "%ms",
-                        &i->type,
-                        &i->path,
-                        &mode,
-                        &user,
-                        &group,
-                        &age)) < 2) {
+        if (sscanf(buffer,
+                   "%c "
+                   "%ms "
+                   "%ms "
+                   "%ms "
+                   "%ms "
+                   "%ms",
+                   &i->type,
+                   &i->path,
+                   &mode,
+                   &user,
+                   &group,
+                   &age) < 2) {
                 log_error("[%s:%u] Syntax error.", fname, line);
                 r = -EIO;
                 goto finish;
@@ -591,6 +591,12 @@ static int parse_line(const char *fname, unsigned line, const char *buffer, cons
         }
 
         if ((r = hashmap_put(items, i->path, i)) < 0) {
+                if (r == -EEXIST) {
+                        log_warning("Two or more conflicting lines for %s configured, ignoring.", i->path);
+                        r = 0;
+                        goto finish;
+                }
+
                 log_error("Failed to insert item %s: %s", i->path, strerror(-r));
                 goto finish;
         }