From 1e39d3eb08a2f79c7bb729a3c0645f0215546b5b Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Thu, 12 Mar 2026 09:48:22 +0900 Subject: [PATCH] sd-device: also add device_get_sysattr_u8() and _u16() --- src/libsystemd/sd-device/device-private.h | 12 ++++++++++-- src/libsystemd/sd-device/sd-device.c | 2 ++ src/libsystemd/sd-device/test-sd-device.c | 12 ++++++++++++ 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/libsystemd/sd-device/device-private.h b/src/libsystemd/sd-device/device-private.h index 1364dd8663..33a2c7ebb6 100644 --- a/src/libsystemd/sd-device/device-private.h +++ b/src/libsystemd/sd-device/device-private.h @@ -20,11 +20,19 @@ int device_get_sysattr_safe_string(sd_device *device, const char *sysattr, const int device_get_sysattr_int(sd_device *device, const char *sysattr, int *ret); int device_get_sysattr_unsigned_full(sd_device *device, const char *sysattr, unsigned base, unsigned *ret); static inline int device_get_sysattr_unsigned(sd_device *device, const char *sysattr, unsigned *ret) { - return device_get_sysattr_unsigned_full(device, sysattr, 0, ret); + return device_get_sysattr_unsigned_full(device, sysattr, /* base= */ 0, ret); +} +int device_get_sysattr_u8_full(sd_device *device, const char *sysattr, unsigned base, uint8_t *ret); +static inline int device_get_sysattr_u8(sd_device *device, const char *sysattr, uint8_t *ret) { + return device_get_sysattr_u8_full(device, sysattr, /* base= */ 0, ret); +} +int device_get_sysattr_u16_full(sd_device *device, const char *sysattr, unsigned base, uint16_t *ret); +static inline int device_get_sysattr_u16(sd_device *device, const char *sysattr, uint16_t *ret) { + return device_get_sysattr_u16_full(device, sysattr, /* base= */ 0, ret); } int device_get_sysattr_u32_full(sd_device *device, const char *sysattr, unsigned base, uint32_t *ret); static inline int device_get_sysattr_u32(sd_device *device, const char *sysattr, uint32_t *ret) { - return device_get_sysattr_u32_full(device, sysattr, 0, ret); + return device_get_sysattr_u32_full(device, sysattr, /* base= */ 0, ret); } int device_get_sysattr_u64(sd_device *device, const char *sysattr, uint64_t *ret); 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 72d28998a7..f157125c50 100644 --- a/src/libsystemd/sd-device/sd-device.c +++ b/src/libsystemd/sd-device/sd-device.c @@ -2689,6 +2689,8 @@ int device_get_sysattr_safe_string(sd_device *device, const char *sysattr, const DEFINE_DEVICE_GET_SYSATTR_PARSE(int, int, safe_atoi); DEFINE_DEVICE_GET_SYSATTR_PARSE_BASE(unsigned, unsigned, safe_atou_full); +DEFINE_DEVICE_GET_SYSATTR_PARSE_BASE(u8, uint8_t, safe_atou8_full); +DEFINE_DEVICE_GET_SYSATTR_PARSE_BASE(u16, uint16_t, safe_atou16_full); DEFINE_DEVICE_GET_SYSATTR_PARSE_BASE(u32, uint32_t, safe_atou32_full); DEFINE_DEVICE_GET_SYSATTR_PARSE(u64, uint64_t, safe_atou64); diff --git a/src/libsystemd/sd-device/test-sd-device.c b/src/libsystemd/sd-device/test-sd-device.c index 13fb9fd25d..efeae7a715 100644 --- a/src/libsystemd/sd-device/test-sd-device.c +++ b/src/libsystemd/sd-device/test-sd-device.c @@ -329,6 +329,18 @@ static void test_sd_device_one(sd_device *d) { uint32_t u32; ASSERT_OK_POSITIVE(device_get_sysattr_u32(d, "ifindex", &u32)); ASSERT_EQ(u32, (uint32_t) ifindex); + + if (ifindex <= UINT16_MAX) { + uint16_t u16; + ASSERT_OK_POSITIVE(device_get_sysattr_u16(d, "ifindex", &u16)); + ASSERT_EQ(u16, (uint16_t) ifindex); + } + + if (ifindex <= UINT8_MAX) { + uint8_t u8; + ASSERT_OK_POSITIVE(device_get_sysattr_u8(d, "ifindex", &u8)); + ASSERT_EQ(u8, (uint8_t) ifindex); + } } }