From: Yu Watanabe Date: Fri, 31 Mar 2023 07:10:36 +0000 (+0900) Subject: sd-id128: introduce id128_read_at() X-Git-Tag: v254-rc1~819^2~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0f44b76601d6ca31a634597ce79304efa5af0153;p=thirdparty%2Fsystemd.git sd-id128: introduce id128_read_at() --- diff --git a/src/libsystemd/sd-id128/id128-util.c b/src/libsystemd/sd-id128/id128-util.c index 0d77b04735c..94094ed208a 100644 --- a/src/libsystemd/sd-id128/id128-util.c +++ b/src/libsystemd/sd-id128/id128-util.c @@ -5,6 +5,7 @@ #include #include "fd-util.h" +#include "fs-util.h" #include "hexdecoct.h" #include "id128-util.h" #include "io-util.h" @@ -101,14 +102,15 @@ int id128_read_fd(int fd, Id128Flag f, sd_id128_t *ret) { return r == -EINVAL ? -EUCLEAN : r; } -int id128_read(const char *path, Id128Flag f, sd_id128_t *ret) { +int id128_read_at(int dir_fd, const char *path, Id128Flag f, sd_id128_t *ret) { _cleanup_close_ int fd = -EBADF; + assert(dir_fd >= 0 || dir_fd == AT_FDCWD); assert(path); - fd = open(path, O_RDONLY|O_CLOEXEC|O_NOCTTY); + fd = xopenat(dir_fd, path, O_RDONLY|O_CLOEXEC|O_NOCTTY, 0); if (fd < 0) - return -errno; + return fd; return id128_read_fd(fd, f, ret); } diff --git a/src/libsystemd/sd-id128/id128-util.h b/src/libsystemd/sd-id128/id128-util.h index 834fa4cd75f..7bab3e83031 100644 --- a/src/libsystemd/sd-id128/id128-util.h +++ b/src/libsystemd/sd-id128/id128-util.h @@ -1,6 +1,7 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once +#include #include #include "sd-id128.h" @@ -19,7 +20,10 @@ typedef enum Id128Flag { } Id128Flag; int id128_read_fd(int fd, Id128Flag f, sd_id128_t *ret); -int id128_read(const char *path, Id128Flag f, sd_id128_t *ret); +int id128_read_at(int dir_fd, const char *path, Id128Flag f, sd_id128_t *ret); +static inline int id128_read(const char *path, Id128Flag f, sd_id128_t *ret) { + return id128_read_at(AT_FDCWD, path, f, ret); +} int id128_write_fd(int fd, Id128Flag f, sd_id128_t id); int id128_write(const char *path, Id128Flag f, sd_id128_t id);