continue;
}
- if (i->type == IGNORE_DIRECTORY_PATH && streq(dent->d_name, p))
- log_debug("Ignoring directory \"%s\"", sub_path);
- else {
- log_debug("Removing directory \"%s\".", sub_path);
-
- if (unlinkat(dirfd(d), dent->d_name, AT_REMOVEDIR) < 0) {
- if (errno != ENOENT && errno != ENOTEMPTY) {
- log_error_errno(errno, "rmdir(%s): %m", sub_path);
- r = -errno;
- }
+ log_debug("Removing directory \"%s\".", sub_path);
+ if (unlinkat(dirfd(d), dent->d_name, AT_REMOVEDIR) < 0)
+ if (errno != ENOENT && errno != ENOTEMPTY) {
+ log_error_errno(errno, "rmdir(%s): %m", sub_path);
+ r = -errno;
}
- }
} else {
/* Skip files for which the sticky bit is
static int get_acls_from_arg(Item *item) {
#ifdef HAVE_ACL
int r;
- _cleanup_(acl_freep) acl_t a = NULL, d = NULL;
assert(item);
return 0;
}
+#ifdef HAVE_ACL
static int path_set_acl(const char *path, acl_type_t type, acl_t acl, bool modify) {
_cleanup_(acl_freep) acl_t dup = NULL;
int r;
strna(t), path);
return 0;
}
+#endif
static int path_set_acls(Item *item, const char *path) {
#ifdef HAVE_ACL
return r;
}
+typedef enum {
+ CREATION_NORMAL,
+ CREATION_EXISTING,
+ CREATION_FORCE,
+ _CREATION_MODE_MAX,
+ _CREATION_MODE_INVALID = -1
+} CreationMode;
+
+static const char *creation_mode_verb_table[_CREATION_MODE_MAX] = {
+ [CREATION_NORMAL] = "Created",
+ [CREATION_EXISTING] = "Found existing",
+ [CREATION_FORCE] = "Created replacement",
+};
+
+DEFINE_PRIVATE_STRING_TABLE_LOOKUP_TO_STRING(creation_mode_verb, CreationMode);
+
static int create_item(Item *i) {
struct stat st;
int r = 0;
+ CreationMode creation;
assert(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_mode_verb_to_string(creation), i->path);
r = path_set_perms(i, i->path);
if (r < 0)
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_mode_verb_to_string(creation), i->path);
r = path_set_perms(i, i->path);
if (r < 0)
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_mode_verb_to_string(creation), i->path);
break;
}
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_mode_verb_to_string(creation),
i->type == CREATE_BLOCK_DEVICE ? "block" : "char",
i->path, major(i->mode), minor(i->mode));