chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
nspawn: add new --personality= switch to make it easier to run 32bit containers on...
[elogind.git]
/
src
/
shared
/
unit-name.c
diff --git
a/src/shared/unit-name.c
b/src/shared/unit-name.c
index 178efefdbfe147fdd5f9411bc458d87391b7b680..408323b8fb8d9b708e4564d6ceffa733d63ccd3d 100644
(file)
--- a/
src/shared/unit-name.c
+++ b/
src/shared/unit-name.c
@@
-62,7
+62,7
@@
static const char* const unit_load_state_table[_UNIT_LOAD_STATE_MAX] = {
DEFINE_STRING_TABLE_LOOKUP(unit_load_state, UnitLoadState);
DEFINE_STRING_TABLE_LOOKUP(unit_load_state, UnitLoadState);
-bool unit_name_is_valid(const char *n,
bool
template_ok) {
+bool unit_name_is_valid(const char *n,
enum template_valid
template_ok) {
const char *e, *i, *at;
/* Valid formats:
const char *e, *i, *at;
/* Valid formats:
@@
-72,6
+72,7
@@
bool unit_name_is_valid(const char *n, bool template_ok) {
*/
assert(n);
*/
assert(n);
+ assert(IN_SET(template_ok, TEMPLATE_VALID, TEMPLATE_INVALID));
if (strlen(n) >= UNIT_NAME_MAX)
return false;
if (strlen(n) >= UNIT_NAME_MAX)
return false;
@@
-96,7
+97,7
@@
bool unit_name_is_valid(const char *n, bool template_ok) {
if (at == n)
return false;
if (at == n)
return false;
- if (!template_ok && at+1 == e)
+ if (!template_ok
== TEMPLATE_VALID
&& at+1 == e)
return false;
}
return false;
}
@@
-186,7
+187,7
@@
char *unit_name_change_suffix(const char *n, const char *suffix) {
size_t a, b;
assert(n);
size_t a, b;
assert(n);
- assert(unit_name_is_valid(n,
true
));
+ assert(unit_name_is_valid(n,
TEMPLATE_VALID
));
assert(suffix);
assert(suffix[0] == '.');
assert(suffix);
assert(suffix[0] == '.');
@@
-481,14
+482,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, enum unit_name_mangle allow_globs) {
char *r, *t;
const char *f;
char *r, *t;
const char *f;
+ const char* valid_chars = allow_globs == MANGLE_GLOB ? "@" 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. */
+ assert(IN_SET(allow_globs, MANGLE_GLOB, MANGLE_NOGLOB));
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
+511,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
+525,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, enum unit_name_mangle allow_globs, const char *suffix) {
char *r, *t;
const char *f;
char *r, *t;
const char *f;
@@
-528,9
+538,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;