From 66f37389209ce6f969d800ddecbf6a7972ef00da Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Thu, 22 Feb 2018 18:24:57 +0100 Subject: [PATCH] unit-name: add new unit_name_build_from_type() helper The new helper is much like unit_name_build() but expects a UnitType value instead of a suffix. --- src/basic/unit-name.c | 30 +++++++++++++++++++++++++----- src/basic/unit-name.h | 1 + 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/src/basic/unit-name.c b/src/basic/unit-name.c index 3d5b0372f..35e63c17e 100644 --- a/src/basic/unit-name.c +++ b/src/basic/unit-name.c @@ -245,25 +245,45 @@ int unit_name_change_suffix(const char *n, const char *suffix, char **ret) { #endif // 0 int unit_name_build(const char *prefix, const char *instance, const char *suffix, char **ret) { - char *s; + UnitType type; assert(prefix); assert(suffix); assert(ret); + if (isempty(suffix)) + return -EINVAL; + if (suffix[0] != '.') + return -EINVAL; + + type = unit_type_from_string(suffix + 1); + if (type < 0) + return -EINVAL; + + return unit_name_build_from_type(prefix, instance, type, ret); +} + +int unit_name_build_from_type(const char *prefix, const char *instance, UnitType type, char **ret) { + const char *ut; + char *s; + + assert(prefix); + assert(type >= 0); + assert(type < _UNIT_TYPE_MAX); + assert(ret); + if (!unit_prefix_is_valid(prefix)) return -EINVAL; if (instance && !unit_instance_is_valid(instance)) return -EINVAL; - if (!unit_suffix_is_valid(suffix)) - return -EINVAL; + ut = unit_type_to_string(type); if (!instance) - s = strappend(prefix, suffix); + s = strjoin(prefix, ".", ut); else - s = strjoin(prefix, "@", instance, suffix); + s = strjoin(prefix, "@", instance, ".", ut); if (!s) return -ENOMEM; diff --git a/src/basic/unit-name.h b/src/basic/unit-name.h index 3515fad4c..07229769a 100644 --- a/src/basic/unit-name.h +++ b/src/basic/unit-name.h @@ -46,6 +46,7 @@ int unit_name_change_suffix(const char *n, const char *suffix, char **ret); #endif // 0 int unit_name_build(const char *prefix, const char *instance, const char *suffix, char **ret); +int unit_name_build_from_type(const char *prefix, const char *instance, UnitType, char **ret); #if 0 /// UNNEEDED by elogind char *unit_name_escape(const char *f); -- 2.30.2