core/manager: split out creation of serialization fd out to a helper

There is a slight change in behaviour: the user manager for root will create a
temporary file in /run/systemd, not /tmp. I don't think this matters, but
simplifies implementation.
This commit is contained in:
Zbigniew Jędrzejewski-Szmek
2017-02-20 18:49:09 -05:00
parent 18f71a3c81
commit 504afd7c34
4 changed files with 34 additions and 13 deletions
+4 -13
View File
@@ -2437,22 +2437,14 @@ void manager_send_unit_plymouth(Manager *m, Unit *u) {
}
int manager_open_serialization(Manager *m, FILE **_f) {
int fd = -1;
int fd;
FILE *f;
assert(_f);
fd = memfd_create("systemd-serialization", MFD_CLOEXEC);
if (fd < 0) {
const char *path;
path = MANAGER_IS_SYSTEM(m) ? "/run/systemd" : "/tmp";
fd = open_tmpfile_unlinkable(path, O_RDWR|O_CLOEXEC);
if (fd < 0)
return -errno;
log_debug("Serializing state to %s.", path);
} else
log_debug("Serializing state to memfd.");
fd = open_serialization_fd("systemd-state");
if (fd < 0)
return fd;
f = fdopen(fd, "w+");
if (!f) {
@@ -2461,7 +2453,6 @@ int manager_open_serialization(Manager *m, FILE **_f) {
}
*_f = f;
return 0;
}