| From 899173e241f781ad4dfb6b40e7c5f35104164435 Mon Sep 17 00:00:00 2001 |
| From: Brad Bishop <bradleyb@fuzziesquirrel.com> |
| Date: Thu, 12 Jan 2017 09:56:54 -0500 |
| Subject: [PATCH 1/2] basic: Factor out string checking from |
| name_to_prefix/instance |
| |
| Add two new functions: string_to_prefix/instance that enable |
| prefix/instance extraction from a name before the name is |
| mangled. |
| |
| Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com> |
| --- |
| src/basic/unit-name.c | 48 +++++++++++++++++++++++++++++++----------------- |
| 1 file changed, 31 insertions(+), 17 deletions(-) |
| |
| diff --git a/src/basic/unit-name.c b/src/basic/unit-name.c |
| index 0a6efa4..93c4838 100644 |
| --- a/src/basic/unit-name.c |
| +++ b/src/basic/unit-name.c |
| @@ -135,42 +135,46 @@ bool unit_suffix_is_valid(const char *s) { |
| return true; |
| } |
| |
| -int unit_name_to_prefix(const char *n, char **ret) { |
| +static int string_to_prefix(const char *s, char **ret) { |
| const char *p; |
| - char *s; |
| + char *r; |
| |
| - assert(n); |
| + assert(s); |
| assert(ret); |
| |
| - if (!unit_name_is_valid(n, UNIT_NAME_ANY)) |
| - return -EINVAL; |
| - |
| - p = strchr(n, '@'); |
| + p = strchr(s, '@'); |
| if (!p) |
| - p = strrchr(n, '.'); |
| + p = strrchr(s, '.'); |
| |
| assert_se(p); |
| |
| - s = strndup(n, p - n); |
| - if (!s) |
| + r = strndup(s, p - s); |
| + if (!r) |
| return -ENOMEM; |
| |
| - *ret = s; |
| + *ret = r; |
| return 0; |
| } |
| |
| -int unit_name_to_instance(const char *n, char **instance) { |
| - const char *p, *d; |
| - char *i; |
| - |
| +int unit_name_to_prefix(const char *n, char **ret) { |
| assert(n); |
| - assert(instance); |
| + assert(ret); |
| |
| if (!unit_name_is_valid(n, UNIT_NAME_ANY)) |
| return -EINVAL; |
| |
| + return string_to_prefix(n, ret); |
| +} |
| + |
| +static int string_to_instance(const char *s, char **instance) { |
| + const char *p, *d; |
| + char *i; |
| + |
| + assert(s); |
| + assert(instance); |
| + |
| /* Everything past the first @ and before the last . is the instance */ |
| - p = strchr(n, '@'); |
| + p = strchr(s, '@'); |
| if (!p) { |
| *instance = NULL; |
| return 0; |
| @@ -190,6 +194,16 @@ int unit_name_to_instance(const char *n, char **instance) { |
| return 1; |
| } |
| |
| +int unit_name_to_instance(const char *n, char **instance) { |
| + assert(n); |
| + assert(instance); |
| + |
| + if (!unit_name_is_valid(n, UNIT_NAME_ANY)) |
| + return -EINVAL; |
| + |
| + return string_to_instance(n, instance); |
| +} |
| + |
| int unit_name_to_prefix_and_instance(const char *n, char **ret) { |
| const char *d; |
| char *s; |
| -- |
| 1.8.3.1 |
| |