From 308d40626d9b5d65dbf553c019d8356c6e007eb0 Mon Sep 17 00:00:00 2001 From: Daan De Meyer Date: Tue, 28 Oct 2025 08:49:13 +0100 Subject: [PATCH] basic: Use xopenat_full() in mkdir_p_root_full() --- src/basic/mkdir.c | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/src/basic/mkdir.c b/src/basic/mkdir.c index a3a02b3e4e..384b860611 100644 --- a/src/basic/mkdir.c +++ b/src/basic/mkdir.c @@ -237,22 +237,19 @@ int mkdir_p_root_full(const char *root, const char *p, uid_t uid, gid_t gid, mod if (r < 0) return r; - if (path_strv_contains(subvolumes, p)) - r = btrfs_subvol_make_fallback(dfd, bn, m); - else - r = RET_NERRNO(mkdirat(dfd, bn, m)); - if (r == -EEXIST) + _cleanup_close_ int nfd = xopenat_full( + dfd, bn, + O_DIRECTORY|O_CREAT|O_EXCL|O_NOFOLLOW|O_CLOEXEC, + path_strv_contains(subvolumes, p) ? XO_SUBVOLUME : 0, + m); + if (nfd == -EEXIST) return 0; - if (r < 0) - return r; + if (nfd < 0) + return nfd; if (ts == USEC_INFINITY && !uid_is_valid(uid) && !gid_is_valid(gid)) return 1; - _cleanup_close_ int nfd = openat(dfd, bn, O_CLOEXEC|O_DIRECTORY|O_NOFOLLOW); - if (nfd < 0) - return -errno; - if (ts != USEC_INFINITY) { struct timespec tspec; timespec_store(&tspec, ts);