Merge pull request #22195 from keszybz/more-specifiers
Add unit specifiers for fragment path and directory
This commit is contained in:
+12
-31
@@ -13,28 +13,22 @@
|
||||
#include "user-util.h"
|
||||
|
||||
static int specifier_prefix_and_instance(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
|
||||
const Unit *u = userdata;
|
||||
|
||||
assert(u);
|
||||
const Unit *u = ASSERT_PTR(userdata);
|
||||
|
||||
return unit_name_to_prefix_and_instance(u->id, ret);
|
||||
}
|
||||
|
||||
static int specifier_prefix(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
|
||||
const Unit *u = userdata;
|
||||
|
||||
assert(u);
|
||||
const Unit *u = ASSERT_PTR(userdata);
|
||||
|
||||
return unit_name_to_prefix(u->id, ret);
|
||||
}
|
||||
|
||||
static int specifier_prefix_unescaped(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
|
||||
_cleanup_free_ char *p = NULL;
|
||||
const Unit *u = userdata;
|
||||
const Unit *u = ASSERT_PTR(userdata);
|
||||
int r;
|
||||
|
||||
assert(u);
|
||||
|
||||
r = unit_name_to_prefix(u->id, &p);
|
||||
if (r < 0)
|
||||
return r;
|
||||
@@ -43,21 +37,17 @@ static int specifier_prefix_unescaped(char specifier, const void *data, const ch
|
||||
}
|
||||
|
||||
static int specifier_instance_unescaped(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
|
||||
const Unit *u = userdata;
|
||||
|
||||
assert(u);
|
||||
const Unit *u = ASSERT_PTR(userdata);
|
||||
|
||||
return unit_name_unescape(strempty(u->instance), ret);
|
||||
}
|
||||
|
||||
static int specifier_last_component(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
|
||||
const Unit *u = userdata;
|
||||
const Unit *u = ASSERT_PTR(userdata);
|
||||
_cleanup_free_ char *prefix = NULL;
|
||||
char *dash;
|
||||
int r;
|
||||
|
||||
assert(u);
|
||||
|
||||
r = unit_name_to_prefix(u->id, &prefix);
|
||||
if (r < 0)
|
||||
return r;
|
||||
@@ -82,9 +72,7 @@ static int specifier_last_component_unescaped(char specifier, const void *data,
|
||||
}
|
||||
|
||||
static int specifier_filename(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
|
||||
const Unit *u = userdata;
|
||||
|
||||
assert(u);
|
||||
const Unit *u = ASSERT_PTR(userdata);
|
||||
|
||||
if (u->instance)
|
||||
return unit_name_path_unescape(u->instance, ret);
|
||||
@@ -97,11 +85,9 @@ static void bad_specifier(const Unit *u, char specifier) {
|
||||
}
|
||||
|
||||
static int specifier_cgroup(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
|
||||
const Unit *u = userdata;
|
||||
const Unit *u = ASSERT_PTR(userdata);
|
||||
char *n;
|
||||
|
||||
assert(u);
|
||||
|
||||
bad_specifier(u, specifier);
|
||||
|
||||
if (u->cgroup_path)
|
||||
@@ -116,11 +102,9 @@ static int specifier_cgroup(char specifier, const void *data, const char *root,
|
||||
}
|
||||
|
||||
static int specifier_cgroup_root(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
|
||||
const Unit *u = userdata;
|
||||
const Unit *u = ASSERT_PTR(userdata);
|
||||
char *n;
|
||||
|
||||
assert(u);
|
||||
|
||||
bad_specifier(u, specifier);
|
||||
|
||||
n = strdup(u->manager->cgroup_root);
|
||||
@@ -132,11 +116,9 @@ static int specifier_cgroup_root(char specifier, const void *data, const char *r
|
||||
}
|
||||
|
||||
static int specifier_cgroup_slice(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
|
||||
const Unit *u = userdata, *slice;
|
||||
const Unit *u = ASSERT_PTR(userdata), *slice;
|
||||
char *n;
|
||||
|
||||
assert(u);
|
||||
|
||||
bad_specifier(u, specifier);
|
||||
|
||||
slice = UNIT_GET_SLICE(u);
|
||||
@@ -155,11 +137,9 @@ static int specifier_cgroup_slice(char specifier, const void *data, const char *
|
||||
}
|
||||
|
||||
static int specifier_special_directory(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
|
||||
const Unit *u = userdata;
|
||||
const Unit *u = ASSERT_PTR(userdata);
|
||||
char *n = NULL;
|
||||
|
||||
assert(u);
|
||||
|
||||
n = strdup(u->manager->prefix[PTR_TO_UINT(data)]);
|
||||
if (!n)
|
||||
return -ENOMEM;
|
||||
@@ -169,7 +149,6 @@ static int specifier_special_directory(char specifier, const void *data, const c
|
||||
}
|
||||
|
||||
int unit_name_printf(const Unit *u, const char* format, char **ret) {
|
||||
|
||||
/*
|
||||
* This will use the passed string as format string and replace the following specifiers (which should all be
|
||||
* safe for inclusion in unit names):
|
||||
@@ -240,6 +219,8 @@ int unit_full_printf_full(const Unit *u, const char *format, size_t max_length,
|
||||
{ 'P', specifier_prefix_unescaped, NULL },
|
||||
|
||||
{ 'f', specifier_filename, NULL },
|
||||
{ 'y', specifier_real_path, u->fragment_path },
|
||||
{ 'Y', specifier_real_directory, u->fragment_path },
|
||||
|
||||
{ 'c', specifier_cgroup, NULL },
|
||||
{ 'r', specifier_cgroup_slice, NULL },
|
||||
|
||||
Reference in New Issue
Block a user