diff options
author | Lennart Poettering <lennart@poettering.net> | 2010-10-20 16:16:45 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2010-10-20 16:16:45 +0200 |
commit | 9fc507041eb524799a0410839e961ec188a78491 (patch) | |
tree | 029b0dee9d8d382b5abc5d7a4aa4078b9033a1a6 /src | |
parent | 980d87505c391682c7d9da2d48a1ba68f35c0339 (diff) |
unit: introduce %f specifier to decode file names
Diffstat (limited to 'src')
-rw-r--r-- | src/unit-name.c | 23 | ||||
-rw-r--r-- | src/unit-name.h | 2 | ||||
-rw-r--r-- | src/unit.c | 11 |
3 files changed, 36 insertions, 0 deletions
diff --git a/src/unit-name.c b/src/unit-name.c index dbaa4a7b12..d0cfca6254 100644 --- a/src/unit-name.c +++ b/src/unit-name.c @@ -427,3 +427,26 @@ char *unit_name_to_path(const char *name) { return e; } + +char *unit_name_path_unescape(const char *f) { + char *e; + + assert(f); + + if (!(e = unit_name_unescape(f))) + return NULL; + + if (e[0] != '/') { + char *w; + + w = strappend("/", e); + free(e); + + if (!w) + return NULL; + + e = w; + } + + return e; +} diff --git a/src/unit-name.h b/src/unit-name.h index 9842db3552..e369910aea 100644 --- a/src/unit-name.h +++ b/src/unit-name.h @@ -42,6 +42,8 @@ char *unit_name_build_escape(const char *prefix, const char *instance, const cha char *unit_name_escape(const char *f); char *unit_name_unescape(const char *f); +char *unit_name_path_unescape(const char *f); + bool unit_name_is_template(const char *n); char *unit_name_replace_instance(const char *f, const char *i); diff --git a/src/unit.c b/src/unit.c index 07978134de..ab6eb20227 100644 --- a/src/unit.c +++ b/src/unit.c @@ -1880,6 +1880,16 @@ static char *specifier_instance_unescaped(char specifier, void *data, void *user return strdup(""); } +static char *specifier_filename(char specifier, void *data, void *userdata) { + Unit *u = userdata; + assert(u); + + if (u->meta.instance) + return unit_name_path_unescape(u->meta.instance); + + return unit_name_to_path(u->meta.instance); +} + char *unit_name_printf(Unit *u, const char* format) { /* @@ -1918,6 +1928,7 @@ char *unit_full_printf(Unit *u, const char *format) { { 'P', specifier_prefix_unescaped, NULL }, { 'i', specifier_string, u->meta.instance }, { 'I', specifier_instance_unescaped, NULL }, + { 'f', specifier_filename, NULL }, { 0, NULL, NULL } }; |