]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
fs-util: make mkfifo_atomic() just a shortcut for mkfifoat_atomic()
authorLennart Poettering <lennart@poettering.net>
Thu, 15 Sep 2022 19:37:52 +0000 (20:37 +0100)
committerLennart Poettering <lennart@poettering.net>
Fri, 23 Sep 2022 07:24:05 +0000 (09:24 +0200)
src/basic/fs-util.c
src/basic/fs-util.h

index 3f23ccab24814124933563a1cdb3f770bb9f338c..927bb418af47611335eca0f5c89e17f8cbf7ad49 100644 (file)
@@ -484,47 +484,24 @@ int mknod_atomic(const char *path, mode_t mode, dev_t dev) {
         return 0;
 }
 
-int mkfifo_atomic(const char *path, mode_t mode) {
+int mkfifoat_atomic(int atfd, const char *path, mode_t mode) {
         _cleanup_free_ char *t = NULL;
         int r;
 
         assert(path);
 
+        /* We're only interested in the (random) filename.  */
         r = tempfn_random(path, NULL, &t);
         if (r < 0)
                 return r;
 
-        if (mkfifo(t, mode) < 0)
-                return -errno;
-
-        if (rename(t, path) < 0) {
-                unlink_noerrno(t);
+        if (mkfifoat(atfd, t, mode) < 0)
                 return -errno;
-        }
-
-        return 0;
-}
-
-int mkfifoat_atomic(int dirfd, const char *path, mode_t mode) {
-        _cleanup_free_ char *t = NULL;
-        int r;
 
-        assert(path);
-
-        if (path_is_absolute(path))
-                return mkfifo_atomic(path, mode);
-
-        /* We're only interested in the (random) filename.  */
-        r = tempfn_random_child("", NULL, &t);
-        if (r < 0)
+        r = RET_NERRNO(renameat(atfd, t, atfd, path));
+        if (r < 0) {
+                (void) unlinkat(atfd, t, 0);
                 return r;
-
-        if (mkfifoat(dirfd, t, mode) < 0)
-                return -errno;
-
-        if (renameat(dirfd, t, dirfd, path) < 0) {
-                unlink_noerrno(t);
-                return -errno;
         }
 
         return 0;
index 6be94d913c655763b6da527343ad2bc042295fff..efa1090d2b68b5ff6ea1c39812a07f80e4246c45 100644 (file)
@@ -63,8 +63,10 @@ static inline int symlink_atomic(const char *from, const char *to) {
         return symlinkat_atomic_full(from, AT_FDCWD, to, false);
 }
 int mknod_atomic(const char *path, mode_t mode, dev_t dev);
-int mkfifo_atomic(const char *path, mode_t mode);
 int mkfifoat_atomic(int dir_fd, const char *path, mode_t mode);
+static inline int mkfifo_atomic(const char *path, mode_t mode) {
+        return mkfifoat_atomic(AT_FDCWD, path, mode);
+}
 
 int get_files_in_directory(const char *path, char ***list);