From: Zbigniew Jędrzejewski-Szmek Date: Tue, 19 Mar 2024 22:35:32 +0000 (+0100) Subject: basic/unit-name: use strdup_to() in slice_build_parent_slice() X-Git-Tag: v256-rc1~459^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=196166dbb1e65a4d942170cb3856cb7e6d28c6d0;p=thirdparty%2Fsystemd.git basic/unit-name: use strdup_to() in slice_build_parent_slice() The handling of the buffer is not obvious, so add a comment. --- diff --git a/src/basic/unit-name.c b/src/basic/unit-name.c index a84b14568d9..4e2f77c03dc 100644 --- a/src/basic/unit-name.c +++ b/src/basic/unit-name.c @@ -797,10 +797,6 @@ good: } int slice_build_parent_slice(const char *slice, char **ret) { - _cleanup_free_ char *s = NULL; - char *dash; - int r; - assert(slice); assert(ret); @@ -812,18 +808,16 @@ int slice_build_parent_slice(const char *slice, char **ret) { return 0; } - s = strdup(slice); + _cleanup_free_ char *s = strdup(slice); if (!s) return -ENOMEM; - dash = strrchr(s, '-'); - if (dash) - strcpy(dash, ".slice"); - else { - r = free_and_strdup(&s, SPECIAL_ROOT_SLICE); - if (r < 0) - return r; - } + char *dash = strrchr(s, '-'); + if (!dash) + return strdup_to_full(ret, SPECIAL_ROOT_SLICE); + + /* We know that s ended with .slice before truncation, so we have enough space. */ + strcpy(dash, ".slice"); *ret = TAKE_PTR(s); return 1;