From 294929f8916ca37d89ccb1757868d22f8068c56b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Sun, 1 Feb 2015 12:29:27 -0500 Subject: [PATCH] tmpfiles: accurately report creation results --- src/tmpfiles/tmpfiles.c | 56 ++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 44 insertions(+), 12 deletions(-) diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c index e816bed..0e1bd86 100644 --- a/src/tmpfiles/tmpfiles.c +++ b/src/tmpfiles/tmpfiles.c @@ -903,9 +903,28 @@ static int glob_item(Item *i, action_t action, bool recursive) { return r; } +typedef enum { + CREATION_NORMAL, + CREATION_EXISTING, + CREATION_FORCE, +} CreationMode; + +static const char* creation_verb(CreationMode mode) { + switch(mode) { + case CREATION_NORMAL: + return "Created"; + case CREATION_EXISTING: + return "Found existing"; + case CREATION_FORCE: + return "Created replacement"; + } + assert_not_reached("Bad creation"); +} + static int create_item(Item *i) { struct stat st; int r = 0; + CreationMode creation; assert(i); @@ -990,8 +1009,11 @@ static int create_item(Item *i) { log_debug("\"%s\" already exists and is not a directory.", i->path); return 0; } - } - log_debug("Created directory \"%s\".", i->path); + + creation = CREATION_EXISTING; + } else + creation = CREATION_NORMAL; + log_debug("%s directory \"%s\".", creation_verb(creation), i->path); r = path_set_perms(i, i->path); if (r < 0) @@ -1026,13 +1048,16 @@ static int create_item(Item *i) { if (r < 0) return log_error_errno(r, "Failed to create fifo %s: %m", i->path); + creation = CREATION_FORCE; } else { log_debug("%s is not a fifo.", i->path); return 0; } - } - } - log_debug("Created fifo \"%s\".", i->path); + } else + creation = CREATION_EXISTING; + } else + creation = CREATION_NORMAL; + log_debug("%s fifo \"%s\".", creation_verb(creation), i->path); r = path_set_perms(i, i->path); if (r < 0) @@ -1062,13 +1087,16 @@ static int create_item(Item *i) { if (r < 0) return log_error_errno(r, "symlink(%s, %s) failed: %m", i->argument, i->path); + creation = CREATION_FORCE; } else { log_debug("\"%s\" is not a symlink or does not point to the correct path.", i->path); return 0; } - } - } - log_debug("Created symlink \"%s\".", i->path); + } else + creation = CREATION_EXISTING; + } else + creation = CREATION_NORMAL; + log_debug("%s symlink \"%s\".", creation_verb(creation), i->path); break; @@ -1118,14 +1146,18 @@ static int create_item(Item *i) { } if (r < 0) - return log_error_errno(r, "Failed to create device node %s: %m", i->path); + return log_error_errno(r, "Failed to create device node \"%s\": %m", i->path); + creation = CREATION_FORCE; } else { log_debug("%s is not a device node.", i->path); return 0; } - } - } - log_debug("Created %s device node \"%s\" %u:%u.", + } else + creation = CREATION_EXISTING; + } else + creation = CREATION_NORMAL; + log_debug("%s %s device node \"%s\" %u:%u.", + creation_verb(creation), i->type == CREATE_BLOCK_DEVICE ? "block" : "char", i->path, major(i->mode), minor(i->mode)); -- 2.7.4