]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
data-fd-util: use fd_reopen() a bit more 26741/head
authorLennart Poettering <lennart@poettering.net>
Thu, 9 Mar 2023 21:56:53 +0000 (22:56 +0100)
committerLennart Poettering <lennart@poettering.net>
Thu, 9 Mar 2023 21:56:53 +0000 (22:56 +0100)
src/shared/data-fd-util.c

index 895d8e8b334d0f70e460eb3d733e67381d58dc01..209898fa6188539688fe8c67e57212a5c1af9573 100644 (file)
@@ -27,7 +27,6 @@
 
 int acquire_data_fd(const void *data, size_t size, unsigned flags) {
         _cleanup_close_pair_ int pipefds[2] = PIPE_EBADF;
-        char pattern[] = "/dev/shm/data-fd-XXXXXX";
         _cleanup_close_ int fd = -EBADF;
         int isz = 0, r;
         ssize_t n;
@@ -135,6 +134,8 @@ try_dev_shm:
 
 try_dev_shm_without_o_tmpfile:
         if ((flags & ACQUIRE_NO_REGULAR) == 0) {
+                char pattern[] = "/dev/shm/data-fd-XXXXXX";
+
                 fd = mkostemp_safe(pattern);
                 if (fd < 0)
                         return fd;
@@ -150,9 +151,7 @@ try_dev_shm_without_o_tmpfile:
                 }
 
                 /* Let's reopen the thing, in order to get an O_RDONLY fd for the original O_RDWR one */
-                r = open(pattern, O_RDONLY|O_CLOEXEC);
-                if (r < 0)
-                        r = -errno;
+                r = fd_reopen(fd, O_RDONLY|O_CLOEXEC);
 
         unlink_and_return:
                 (void) unlink(pattern);