#include "varlink-internal.h"
int manager_open_serialization(Manager *m, FILE **ret_f) {
- _cleanup_close_ int fd = -EBADF;
- FILE *f;
-
assert(ret_f);
- fd = open_serialization_fd("systemd-state");
- if (fd < 0)
- return fd;
-
- f = take_fdopen(&fd, "w+");
- if (!f)
- return -errno;
-
- *ret_f = f;
- return 0;
+ return open_serialization_file("systemd-state", ret_f);
}
static bool manager_timestamp_shall_serialize(ManagerTimestamp t) {
return fd;
}
+
+int open_serialization_file(const char *ident, FILE **ret) {
+ _cleanup_fclose_ FILE *f = NULL;
+ _cleanup_close_ int fd;
+
+ assert(ret);
+
+ fd = open_serialization_fd(ident);
+ if (fd < 0)
+ return fd;
+
+ f = take_fdopen(&fd, "w+");
+ if (!f)
+ return -errno;
+
+ *ret = TAKE_PTR(f);
+
+ return 0;
+}
int deserialize_pidref(FDSet *fds, const char *value, PidRef *ret);
int open_serialization_fd(const char *ident);
+int open_serialization_file(const char *ident, FILE **ret);
assert_se(write(fd, "test\n", 5) == 5);
}
+TEST(open_serialization_file) {
+ _cleanup_fclose_ FILE *f = NULL;
+ int r;
+
+ r = open_serialization_file("test", &f);
+ assert_se(r >= 0);
+ assert_se(f);
+
+ assert_se(fwrite("test\n", 1, 5, f) == 5);
+}
+
TEST(fd_move_above_stdio) {
int original_stdin, new_fd;