From: Lennart Poettering Date: Mon, 8 Oct 2018 15:44:52 +0000 (+0200) Subject: portable: create/remove the 'attached' unit file directory when we can X-Git-Tag: v240~597^2~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d09d85a2a0899428150eec2ab9083b2e01b0c2d5;p=thirdparty%2Fsystemd.git portable: create/remove the 'attached' unit file directory when we can Let's not litter the system with this unit directory unnecessarily, and let's try to create/remove it when necessary. --- diff --git a/src/portable/portable.c b/src/portable/portable.c index 49eaf84b1aa..ca8043b41ee 100644 --- a/src/portable/portable.c +++ b/src/portable/portable.c @@ -850,14 +850,24 @@ static int attach_unit_file( assert(PORTABLE_METADATA_IS_UNIT(m)); where = attached_path(paths, flags); - path = strjoina(where, "/", m->name); + (void) mkdir_parents(where, 0755); + if (mkdir(where, 0755) < 0) { + if (errno != EEXIST) + return -errno; + } else + (void) portable_changes_add(changes, n_changes, PORTABLE_MKDIR, where, NULL); + + path = strjoina(where, "/", m->name); dropin_dir = strjoin(path, ".d"); if (!dropin_dir) return -ENOMEM; - (void) mkdir_p(dropin_dir, 0755); - (void) portable_changes_add(changes, n_changes, PORTABLE_MKDIR, dropin_dir, NULL); + if (mkdir(dropin_dir, 0755) < 0) { + if (errno != EEXIST) + return -errno; + } else + (void) portable_changes_add(changes, n_changes, PORTABLE_MKDIR, dropin_dir, NULL); /* We install the drop-ins first, and the actual unit file last to achieve somewhat atomic behaviour if PID 1 * is reloaded while we are creating things here: as long as only the drop-ins exist the unit doesn't exist at @@ -1291,6 +1301,10 @@ int portable_detach( portable_changes_add(changes, n_changes, PORTABLE_UNLINK, sl, NULL); } + /* Try to remove the unit file directory, if we can */ + if (rmdir(where) >= 0) + portable_changes_add(changes, n_changes, PORTABLE_UNLINK, where, NULL); + return ret; not_found: