From: Luca Boccassi Date: Tue, 19 Sep 2023 00:19:10 +0000 (+0100) Subject: serialize: add open_serialization_file() X-Git-Tag: v255-rc1~250^2~9 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=81b913f076348be53bf4292793896790265b48dd;p=thirdparty%2Fsystemd.git serialize: add open_serialization_file() --- diff --git a/src/core/manager-serialize.c b/src/core/manager-serialize.c index 3d6af0d046b..8be54c7ccc0 100644 --- a/src/core/manager-serialize.c +++ b/src/core/manager-serialize.c @@ -18,21 +18,9 @@ #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) { diff --git a/src/shared/serialize.c b/src/shared/serialize.c index 525adc73ed0..3606390b99c 100644 --- a/src/shared/serialize.c +++ b/src/shared/serialize.c @@ -400,3 +400,22 @@ int open_serialization_fd(const char *ident) { 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; +} diff --git a/src/shared/serialize.h b/src/shared/serialize.h index 1b2c435f775..82657bc8732 100644 --- a/src/shared/serialize.h +++ b/src/shared/serialize.h @@ -42,3 +42,4 @@ int deserialize_strv(char ***l, const char *value); 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); diff --git a/src/test/test-fd-util.c b/src/test/test-fd-util.c index 20d412f5c6c..67ec3e59f1f 100644 --- a/src/test/test-fd-util.c +++ b/src/test/test-fd-util.c @@ -100,6 +100,17 @@ TEST(open_serialization_fd) { 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;