From e3e0314b56012f7febc279d268f2cadc1fcc0f25 Mon Sep 17 00:00:00 2001 From: Zbigniew Jędrzejewski-Szmek Date: Wed, 25 Dec 2013 18:10:18 -0500 Subject: systemctl: allow globbing in commands which take multiple unit names --- src/shared/unit-name.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) (limited to 'src/shared/unit-name.c') 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; -- cgit v1.2.3-54-g00ecf