diff options
Diffstat (limited to 'src/shared/unit-name.c')
-rw-r--r-- | src/shared/unit-name.c | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/src/shared/unit-name.c b/src/shared/unit-name.c index 178efefdbf..832b926813 100644 --- a/src/shared/unit-name.c +++ b/src/shared/unit-name.c @@ -481,15 +481,18 @@ int unit_name_from_dbus_path(const char *path, char **name) { return 0; } -char *unit_name_mangle(const char *name) { + +/** + * Try to turn a string that might not be a unit name into a + * sensible unit name. + */ +char *unit_name_mangle(const char *name, bool allow_globs) { char *r, *t; const char *f; + const char* valid_chars = allow_globs ? "@" VALID_CHARS "[]!-*?" : "@" VALID_CHARS; assert(name); - /* Try to turn a string that might not be a unit name into a - * sensible unit name. */ - if (is_device_path(name)) return unit_name_from_path(name, ".device"); @@ -506,7 +509,7 @@ char *unit_name_mangle(const char *name) { for (f = name, t = r; *f; f++) { if (*f == '/') *(t++) = '-'; - else if (!strchr("@" VALID_CHARS, *f)) + else if (!strchr(valid_chars, *f)) t = do_escape_char(*f, t); else *(t++) = *f; @@ -520,7 +523,12 @@ char *unit_name_mangle(const char *name) { return r; } -char *unit_name_mangle_with_suffix(const char *name, const char *suffix) { + +/** + * Similar to unit_name_mangle(), but is called when we know + * that this is about a specific unit type. + */ +char *unit_name_mangle_with_suffix(const char *name, bool allow_globs, const char *suffix) { char *r, *t; const char *f; @@ -528,9 +536,6 @@ char *unit_name_mangle_with_suffix(const char *name, const char *suffix) { assert(suffix); assert(suffix[0] == '.'); - /* Similar to unit_name_mangle(), but is called when we know - * that this is about snapshot units. */ - r = new(char, strlen(name) * 4 + strlen(suffix) + 1); if (!r) return NULL; |