From db3049b6f0af4643b2678ad58ffdb93ab736ceaf Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Tue, 30 Aug 2022 05:23:05 +0900 Subject: [PATCH] sd-device: introduce device_opendir() --- src/libsystemd/sd-device/device-private.h | 3 +++ src/libsystemd/sd-device/sd-device.c | 30 +++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/src/libsystemd/sd-device/device-private.h b/src/libsystemd/sd-device/device-private.h index 724061a28cd..d53479e8c97 100644 --- a/src/libsystemd/sd-device/device-private.h +++ b/src/libsystemd/sd-device/device-private.h @@ -1,6 +1,7 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once +#include #include #include #include @@ -14,6 +15,8 @@ int device_new_from_mode_and_devnum(sd_device **ret, mode_t mode, dev_t devnum); int device_new_from_nulstr(sd_device **ret, char *nulstr, size_t len); int device_new_from_strv(sd_device **ret, char **strv); +int device_opendir(sd_device *device, const char *subdir, DIR **ret); + int device_get_property_bool(sd_device *device, const char *key); int device_get_sysattr_unsigned(sd_device *device, const char *sysattr, unsigned *ret_value); int device_get_sysattr_bool(sd_device *device, const char *sysattr); diff --git a/src/libsystemd/sd-device/sd-device.c b/src/libsystemd/sd-device/sd-device.c index fd2bc193234..7a5403be6fc 100644 --- a/src/libsystemd/sd-device/sd-device.c +++ b/src/libsystemd/sd-device/sd-device.c @@ -2472,3 +2472,33 @@ _public_ int sd_device_open(sd_device *device, int flags) { return TAKE_FD(fd2); } + +int device_opendir(sd_device *device, const char *subdir, DIR **ret) { + _cleanup_closedir_ DIR *d = NULL; + _cleanup_free_ char *path = NULL; + const char *syspath; + int r; + + assert(device); + assert(ret); + + r = sd_device_get_syspath(device, &syspath); + if (r < 0) + return r; + + if (subdir) { + if (!path_is_safe(subdir)) + return -EINVAL; + + path = path_join(syspath, subdir); + if (!path) + return -ENOMEM; + } + + d = opendir(path ?: syspath); + if (!d) + return -errno; + + *ret = TAKE_PTR(d); + return 0; +} -- 2.47.3