]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-device: use macro to define device_get_sysattr_int() and friends
authorYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 12 Mar 2026 00:26:29 +0000 (09:26 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Sun, 17 May 2026 17:55:56 +0000 (02:55 +0900)
src/libsystemd/sd-device/device-private.h
src/libsystemd/sd-device/sd-device.c

index 9d2a8f4a8a0034c92df6980809f8d10686c7bf4e..1364dd866393ad8dd7076e99c678cb86e6929a66 100644 (file)
@@ -22,7 +22,10 @@ int device_get_sysattr_unsigned_full(sd_device *device, const char *sysattr, uns
 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);
 }
-int device_get_sysattr_u32(sd_device *device, const char *sysattr, uint32_t *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);
+}
 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);
 int device_get_devlink_priority(sd_device *device, int *ret);
index 0bba1efbe200bef343b1074a1a8ce5e476b3328f..72d28998a77cf4d9f1030d0184cfe5164eb30e78 100644 (file)
@@ -2647,81 +2647,50 @@ int device_get_sysattr_safe_string(sd_device *device, const char *sysattr, const
         return 0;
 }
 
-int device_get_sysattr_int(sd_device *device, const char *sysattr, int *ret) {
-        const char *value;
-        int r;
-
-        r = sd_device_get_sysattr_value(device, sysattr, &value);
-        if (r < 0)
-                return r;
-
-        int v;
-        r = safe_atoi(value, &v);
-        if (r < 0)
-                return log_device_debug_errno(device, r, "Failed to parse '%s' attribute: %m", sysattr);
-
-        if (ret)
-                *ret = v;
-        /* We return "true" if the value is positive. */
-        return v > 0;
-}
-
-int device_get_sysattr_unsigned_full(sd_device *device, const char *sysattr, unsigned base, unsigned *ret) {
-        const char *value;
-        int r;
-
-        r = sd_device_get_sysattr_value(device, sysattr, &value);
-        if (r < 0)
-                return r;
-
-        unsigned v;
-        r = safe_atou_full(value, base, &v);
-        if (r < 0)
-                return log_device_debug_errno(device, r, "Failed to parse '%s' attribute: %m", sysattr);
-
-        if (ret)
-                *ret = v;
-        /* We return "true" if the value is positive. */
-        return v > 0;
-}
-
-int device_get_sysattr_u32(sd_device *device, const char *sysattr, uint32_t *ret) {
-        const char *value;
-        int r;
-
-        r = sd_device_get_sysattr_value(device, sysattr, &value);
-        if (r < 0)
-                return r;
-
-        uint32_t v;
-        r = safe_atou32(value, &v);
-        if (r < 0)
-                return log_device_debug_errno(device, r, "Failed to parse '%s' attribute: %m", sysattr);
-
-        if (ret)
-                *ret = v;
-        /* We return "true" if the value is positive. */
-        return v > 0;
-}
-
-int device_get_sysattr_u64(sd_device *device, const char *sysattr, uint64_t *ret) {
-        const char *value;
-        int r;
-
-        r = sd_device_get_sysattr_value(device, sysattr, &value);
-        if (r < 0)
-                return r;
+#define DEFINE_DEVICE_GET_SYSATTR_PARSE(name, type, parser)             \
+        int device_get_sysattr_##name(sd_device *device, const char *sysattr, type *ret) { \
+                const char *value;                                      \
+                int r;                                                  \
+                                                                        \
+                r = sd_device_get_sysattr_value(device, sysattr, &value); \
+                if (r < 0)                                              \
+                        return r;                                       \
+                                                                        \
+                type v;                                                 \
+                r = parser(value, &v);                                  \
+                if (r < 0)                                              \
+                        return log_device_debug_errno(device, r, "Failed to parse '%s' attribute: %m", sysattr); \
+                                                                        \
+                if (ret)                                                \
+                        *ret = v;                                       \
+                /* We return "true" if the value is positive. */        \
+                return v > 0;                                           \
+        }
 
-        uint64_t v;
-        r = safe_atou64(value, &v);
-        if (r < 0)
-                return log_device_debug_errno(device, r, "Failed to parse '%s' attribute: %m", sysattr);
+#define DEFINE_DEVICE_GET_SYSATTR_PARSE_BASE(name, type, parser)  \
+        int device_get_sysattr_##name##_full(sd_device *device, const char *sysattr, unsigned base, type *ret) { \
+                const char *value;                                      \
+                int r;                                                  \
+                                                                        \
+                r = sd_device_get_sysattr_value(device, sysattr, &value); \
+                if (r < 0)                                              \
+                        return r;                                       \
+                                                                        \
+                type v;                                                 \
+                r = parser(value, base, &v);                            \
+                if (r < 0)                                              \
+                        return log_device_debug_errno(device, r, "Failed to parse '%s' attribute: %m", sysattr); \
+                                                                        \
+                if (ret)                                                \
+                        *ret = v;                                       \
+                /* We return "true" if the value is positive. */        \
+                return v > 0;                                           \
+        }
 
-        if (ret)
-                *ret = v;
-        /* We return "true" if the value is positive. */
-        return v > 0;
-}
+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(u32, uint32_t, safe_atou32_full);
+DEFINE_DEVICE_GET_SYSATTR_PARSE(u64, uint64_t, safe_atou64);
 
 int device_get_sysattr_bool(sd_device *device, const char *sysattr) {
         const char *value;