summaryrefslogtreecommitdiff
path: root/src/shared/unit-name.c
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2013-12-25 18:10:18 -0500
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2013-12-26 13:24:36 -0500
commite3e0314b56012f7febc279d268f2cadc1fcc0f25 (patch)
tree77167853e86557b2ec2e377ebdcebc91e1d13df4 /src/shared/unit-name.c
parent8d5ba5a946388c965632713f6c1abfb3acba17f7 (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.c23
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;