return 0;
}
-static int user_runtime_dir(char **ret) {
+static int user_runtime_dir(char **ret, const char *suffix) {
const char *e;
char *j;
assert(ret);
+ assert(suffix);
e = getenv("XDG_RUNTIME_DIR");
if (!e)
return -ENXIO;
- j = strappend(e, "/systemd/user");
+ j = strappend(e, suffix);
if (!j)
return -ENOMEM;
char *j;
assert(ret);
+ assert(suffix);
/* We don't treat /etc/xdg/systemd here as the spec
* suggests because we assume that that is a link to
}
static int acquire_transient_dir(UnitFileScope scope, char **ret) {
- char *transient;
-
assert(ret);
switch (scope) {
- case UNIT_FILE_SYSTEM:
- transient = strdup("/run/systemd/transient");
- break;
-
- case UNIT_FILE_USER: {
- const char *e;
+ case UNIT_FILE_SYSTEM: {
+ char *transient;
- e = getenv("XDG_RUNTIME_DIR");
- if (!e)
- return -ENXIO;
+ transient = strdup("/run/systemd/transient");
+ if (!transient)
+ return -ENOMEM;
- transient = strjoin(e, "/systemd/transient", NULL);
- break;
+ *ret = transient;
+ return 0;
}
+ case UNIT_FILE_USER:
+ return user_runtime_dir(ret, "/systemd/transient");
+
case UNIT_FILE_GLOBAL:
return -EOPNOTSUPP;
assert_not_reached("Hmm, unexpected scope value.");
}
- if (!transient)
- return -ENOMEM;
-
- *ret = transient;
- return 0;
}
static int acquire_config_dirs(UnitFileScope scope, char **persistent, char **runtime) {
if (r < 0)
return r;
- r = user_runtime_dir(runtime);
+ r = user_runtime_dir(runtime, "/systemd/user");
if (r < 0)
return r;