From 3392079e4b54dca7830050ee852df70ad66036aa Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Thu, 4 Jan 2024 18:38:28 +0100 Subject: [PATCH] generator: teach generator_add_symlink_full() to optionally make alias symlinks rather than just .wants/ style symlinks --- src/shared/generator.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/shared/generator.c b/src/shared/generator.c index d183eb9654..b96715c59c 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();