From: Zbigniew Jędrzejewski-Szmek Date: Sat, 1 Apr 2023 14:23:47 +0000 (+0200) Subject: core: simplify unit_escape_setting() X-Git-Tag: v254-rc1~813^2~6 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=68ecb48b90bd88c92253729304cac4647e143b8d;p=thirdparty%2Fsystemd.git core: simplify unit_escape_setting() The function had a provision for NULL input, and would return NULL, but that looks like an error and all callers pass in a non-NULL arg and report oom on NULL. So assert that the input is non-NULL. All callers specifed the output buffer, so we can simplify the logic to only make an allocation if appropriate and change the return type to 'const *'. No functional change. --- diff --git a/src/core/unit.c b/src/core/unit.c index ce7b5a177cd..e0deccc7b91 100644 --- a/src/core/unit.c +++ b/src/core/unit.c @@ -4310,20 +4310,18 @@ static const char* unit_drop_in_dir(Unit *u, UnitWriteFlags flags) { return NULL; } -char* unit_escape_setting(const char *s, UnitWriteFlags flags, char **buf) { +const char* unit_escape_setting(const char *s, UnitWriteFlags flags, char **buf) { + assert(s); assert(!FLAGS_SET(flags, UNIT_ESCAPE_EXEC_SYNTAX | UNIT_ESCAPE_C)); + assert(buf); _cleanup_free_ char *t = NULL; - if (!s) - return NULL; - - /* Escapes the input string as requested. Returns the escaped string. If 'buf' is specified then the - * allocated return buffer pointer is also written to *buf, except if no escaping was necessary, in - * which case *buf is set to NULL, and the input pointer is returned as-is. This means the return - * value always contains a properly escaped version, but *buf when passed only contains a pointer if - * an allocation was necessary. If *buf is not specified, then the return value always needs to be - * freed. Callers can use this to optimize memory allocations. */ + /* Returns a string with any escaping done. If no escaping was necessary, *buf is set to NULL, and + * the input pointer is returned as-is. If an allocation was needed, the return buffer pointer is + * written to *buf. This means the return value always contains a properly escaped version, but *buf + * only contains a pointer if an allocation was made. Callers can use this to optimize memory + * allocations. */ if (flags & UNIT_ESCAPE_SPECIFIERS) { t = specifier_escape(s); @@ -4353,12 +4351,8 @@ char* unit_escape_setting(const char *s, UnitWriteFlags flags, char **buf) { s = t; } - if (buf) { - *buf = TAKE_PTR(t); - return (char*) s; - } - - return TAKE_PTR(t) ?: strdup(s); + *buf = TAKE_PTR(t); + return s; } char* unit_concat_strv(char **l, UnitWriteFlags flags) { diff --git a/src/core/unit.h b/src/core/unit.h index 513c8181f57..420405b2b77 100644 --- a/src/core/unit.h +++ b/src/core/unit.h @@ -964,7 +964,7 @@ ExecRuntime *unit_get_exec_runtime(Unit *u) _pure_; int unit_setup_exec_runtime(Unit *u); -char* unit_escape_setting(const char *s, UnitWriteFlags flags, char **buf); +const char* unit_escape_setting(const char *s, UnitWriteFlags flags, char **buf); char* unit_concat_strv(char **l, UnitWriteFlags flags); int unit_write_setting(Unit *u, UnitWriteFlags flags, const char *name, const char *data);