chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
systemctl: allow globbing in commands which take multiple unit names
[elogind.git]
/
src
/
shared
/
unit-name.c
diff --git
a/src/shared/unit-name.c
b/src/shared/unit-name.c
index 178efefdbfe147fdd5f9411bc458d87391b7b680..832b9268133f2e1b06a5c3c499cb1be850df9500 100644
(file)
--- 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;
}
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;
char *r, *t;
const char *f;
+ const char* valid_chars = allow_globs ? "@" VALID_CHARS "[]!-*?" : "@" VALID_CHARS;
assert(name);
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");
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++) = '-';
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;
t = do_escape_char(*f, t);
else
*(t++) = *f;
@@
-520,7
+523,12
@@
char *unit_name_mangle(const char *name) {
return r;
}
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;
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] == '.');
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;
r = new(char, strlen(name) * 4 + strlen(suffix) + 1);
if (!r)
return NULL;