From: Lennart Poettering Date: Thu, 15 Sep 2022 19:37:52 +0000 (+0100) Subject: fs-util: make mkfifo_atomic() just a shortcut for mkfifoat_atomic() X-Git-Tag: v252-rc1~100^2~9 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4f477796f3bfc6926c8bbb07a940afc2a8b29059;p=thirdparty%2Fsystemd.git fs-util: make mkfifo_atomic() just a shortcut for mkfifoat_atomic() --- diff --git a/src/basic/fs-util.c b/src/basic/fs-util.c index 3f23ccab248..927bb418af4 100644 --- a/src/basic/fs-util.c +++ b/src/basic/fs-util.c @@ -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; diff --git a/src/basic/fs-util.h b/src/basic/fs-util.h index 6be94d913c6..efa1090d2b6 100644 --- a/src/basic/fs-util.h +++ b/src/basic/fs-util.h @@ -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);