diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2013-12-25 18:10:18 -0500 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2013-12-26 13:24:36 -0500 |
commit | e3e0314b56012f7febc279d268f2cadc1fcc0f25 (patch) | |
tree | 77167853e86557b2ec2e377ebdcebc91e1d13df4 /src/shared/unit-name.c | |
parent | 8d5ba5a946388c965632713f6c1abfb3acba17f7 (diff) |
systemctl: allow globbing in commands which take multiple unit names
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; |