From: Lennart Poettering Date: Thu, 4 Jan 2024 17:38:28 +0000 (+0100) Subject: generator: teach generator_add_symlink_full() to optionally make alias symlinks rathe... X-Git-Tag: v256-rc1~1185^2~8 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3392079e4b54dca7830050ee852df70ad66036aa;p=thirdparty%2Fsystemd.git generator: teach generator_add_symlink_full() to optionally make alias symlinks rather than just .wants/ style symlinks --- diff --git a/src/shared/generator.c b/src/shared/generator.c index d183eb9654f..b96715c59cc 100644 --- a/src/shared/generator.c +++ b/src/shared/generator.c @@ -80,7 +80,6 @@ int generator_open_unit_file_full( return 0; } - int generator_add_symlink_full( const char *dir, const char *dst, @@ -93,11 +92,13 @@ int generator_add_symlink_full( assert(dir); assert(dst); - assert(dep_type); assert(src); - /* Adds a symlink from ./ to (if src is absolute) or ../ (otherwise). If - * is specified, then must be a template unit name, and we'll instantiate it. */ + /* If 'dep_type' is specified adds a symlink from ./ to (if src is absolute) or ../ (otherwise). + * + * If 'dep_type' is NULL, it will create a symlink to (i.e. create an alias. + * + * If is specified, then must be a template unit name, and we'll instantiate it. */ r = path_extract_directory(src, &dn); if (r < 0 && r != -EDESTADDRREQ) /* EDESTADDRREQ → just a file name was passed */ @@ -115,11 +116,19 @@ int generator_add_symlink_full( return log_error_errno(r, "Failed to instantiate '%s' for '%s': %m", fn, instance); } - from = path_join(dn ?: "..", fn); - if (!from) - return log_oom(); + if (dep_type) { /* Create a .wants/ style dep */ + from = path_join(dn ?: "..", fn); + if (!from) + return log_oom(); - to = strjoin(dir, "/", dst, ".", dep_type, "/", instantiated ?: fn); + to = strjoin(dir, "/", dst, ".", dep_type, "/", instantiated ?: fn); + } else { /* or create an alias */ + from = dn ? path_join(dn, fn) : strdup(fn); + if (!from) + return log_oom(); + + to = strjoin(dir, "/", dst); + } if (!to) return log_oom();