From 196166dbb1e65a4d942170cb3856cb7e6d28c6d0 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 19 Mar 2024 23:35:32 +0100 Subject: [PATCH] basic/unit-name: use strdup_to() in slice_build_parent_slice() The handling of the buffer is not obvious, so add a comment. --- src/basic/unit-name.c | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) 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; -- 2.47.3