From: Yu Watanabe Date: Wed, 11 Mar 2026 22:07:12 +0000 (+0900) Subject: tree-wide: use device_get_sysattr_unsigned() and friends X-Git-Tag: v261-rc1~125^2~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6f72bb7bc9a264e269adb1ff3228467adccd0e94;p=thirdparty%2Fsystemd.git tree-wide: use device_get_sysattr_unsigned() and friends --- diff --git a/src/backlight/backlight.c b/src/backlight/backlight.c index 29ce29fab91..a84640d45dd 100644 --- a/src/backlight/backlight.c +++ b/src/backlight/backlight.c @@ -66,13 +66,9 @@ static int has_multiple_graphics_cards(void) { return r; FOREACH_DEVICE(e, dev) { - const char *s; - unsigned long c; + uint32_t c; - if (sd_device_get_sysattr_value(dev, "class", &s) < 0) - continue; - - if (safe_atolu(s, &c) < 0) + if (device_get_sysattr_u32(dev, "class", &c) < 0) continue; if (c != PCI_CLASS_GRAPHICS_CARD) @@ -180,7 +176,7 @@ static int same_device(sd_device *a, sd_device *b) { static int validate_device(sd_device *device) { _cleanup_(sd_device_enumerator_unrefp) sd_device_enumerator *enumerate = NULL; - const char *v, *sysname; + const char *sysname; sd_device *parent; int r; @@ -205,10 +201,10 @@ static int validate_device(sd_device *device) { if (r > 0) return true; /* We assume LED device is always valid. */ - r = sd_device_get_sysattr_value(device, "type", &v); + r = device_get_sysattr_streq(device, "type", "raw"); if (r < 0) return log_device_debug_errno(device, r, "Failed to read 'type' sysattr: %m"); - if (!streq(v, "raw")) + if (r == 0) return true; r = find_pci_or_platform_parent(device, &parent); @@ -316,7 +312,7 @@ static int read_max_brightness(sd_device *device, unsigned *ret) { r = device_get_sysattr_unsigned(device, "max_brightness", &max_brightness); if (r < 0) - return log_device_warning_errno(device, r, "Failed to read/parse 'max_brightness' attribute: %m"); + return log_device_warning_errno(device, r, "Failed to read 'max_brightness' attribute: %m"); /* If max_brightness is 0, then there is no actual backlight device. This happens on desktops * with Asus mainboards that load the eeepc-wmi module. */ @@ -418,21 +414,16 @@ static int shall_clamp(sd_device *device, unsigned *ret) { } static int read_brightness(sd_device *device, unsigned max_brightness, unsigned *ret_brightness) { - const char *value; unsigned brightness; int r; assert(device); assert(ret_brightness); - r = sd_device_get_sysattr_value(device, "brightness", &value); + r = device_get_sysattr_unsigned(device, "brightness", &brightness); if (r < 0) return log_device_debug_errno(device, r, "Failed to read 'brightness' attribute: %m"); - r = safe_atou(value, &brightness); - if (r < 0) - return log_device_debug_errno(device, r, "Failed to parse 'brightness' attribute: %s", value); - if (brightness > max_brightness) return log_device_debug_errno(device, SYNTHETIC_ERRNO(EINVAL), "brightness=%u is larger than max_brightness=%u", diff --git a/src/login/logind-core.c b/src/login/logind-core.c index 33f895f0041..c8846d592b7 100644 --- a/src/login/logind-core.c +++ b/src/login/logind-core.c @@ -13,6 +13,7 @@ #include "bus-locator.h" #include "cgroup-util.h" #include "conf-parser.h" +#include "device-private.h" #include "device-util.h" #include "efi-loader.h" #include "errno-util.h" @@ -676,21 +677,17 @@ static int manager_count_external_displays(Manager *m) { continue; /* Ignore ports that are not enabled */ - const char *enabled; - r = sd_device_get_sysattr_value(d, "enabled", &enabled); - if (r == -ENOENT) + r = device_get_sysattr_streq(d, "enabled", "enabled"); + if (IN_SET(r, 0, -ENOENT)) continue; if (r < 0) return r; - if (!streq(enabled, "enabled")) - continue; /* We count any connector which is not explicitly "disconnected" as connected. */ - const char *status = NULL; - r = sd_device_get_sysattr_value(d, "status", &status); + r = device_get_sysattr_streq(d, "status", "disconnected"); if (r < 0 && r != -ENOENT) return r; - if (!streq_ptr(status, "disconnected")) + if (r <= 0) n++; } diff --git a/src/mount/mount-tool.c b/src/mount/mount-tool.c index 2e391ee4d24..0869fe27e15 100644 --- a/src/mount/mount-tool.c +++ b/src/mount/mount-tool.c @@ -1228,7 +1228,6 @@ static int acquire_description(sd_device *d) { } static int acquire_removable(sd_device *d) { - const char *v; int r; assert(d); @@ -1238,8 +1237,13 @@ static int acquire_removable(sd_device *d) { return 0; for (;;) { - if (sd_device_get_sysattr_value(d, "removable", &v) >= 0) + r = device_get_sysattr_bool(d, "removable"); + if (r == 0) + return 0; /* not a removable device */ + if (r > 0) break; + if (r != -ENOENT) + return log_device_debug_errno(d, r, "Failed to read 'removable' sysattr: %m"); r = sd_device_get_parent(d, &d); if (r == -ENODEV) @@ -1252,9 +1256,6 @@ static int acquire_removable(sd_device *d) { return r; } - if (parse_boolean(v) <= 0) - return 0; - log_debug("Discovered removable device."); if (arg_action == ACTION_DEFAULT) { diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 33275538364..a69a5e8979c 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -23,6 +23,7 @@ #include "alloc-util.h" #include "arphrd-util.h" #include "bitfield.h" +#include "device-private.h" #include "device-util.h" #include "dns-domain.h" #include "errno-util.h" @@ -66,7 +67,6 @@ #include "networkd-wifi.h" #include "networkd-wwan-bus.h" #include "ordered-set.h" -#include "parse-util.h" #include "set.h" #include "socket-util.h" #include "string-table.h" @@ -1334,13 +1334,9 @@ static int link_get_network(Link *link, Network **ret) { continue; if (network->match.ifname && link->dev) { - uint8_t name_assign_type = NET_NAME_UNKNOWN; - const char *attr; - - if (sd_device_get_sysattr_value(link->dev, "name_assign_type", &attr) >= 0) - (void) safe_atou8(attr, &name_assign_type); - - warn = name_assign_type == NET_NAME_ENUM; + uint8_t name_assign_type; + if (device_get_sysattr_u8(link->dev, "name_assign_type", &name_assign_type) >= 0) + warn = name_assign_type == NET_NAME_ENUM; } log_link_full(link, warn ? LOG_WARNING : LOG_DEBUG, diff --git a/src/shared/battery-util.c b/src/shared/battery-util.c index 7c3336f4654..7e18c2ee87a 100644 --- a/src/shared/battery-util.c +++ b/src/shared/battery-util.c @@ -75,11 +75,10 @@ static bool battery_is_discharging(sd_device *d) { assert(d); - r = sd_device_get_sysattr_value(d, "scope", &val); - if (r < 0) { - if (r != -ENOENT) - log_device_debug_errno(d, r, "Failed to read 'scope' sysfs attribute, ignoring: %m"); - } else if (streq(val, "Device")) { + r = device_get_sysattr_streq(d, "scope", "Device"); + if (r < 0 && r != -ENOENT) + log_device_debug_errno(d, r, "Failed to read 'scope' sysfs attribute, ignoring: %m"); + if (r > 0) { log_device_debug(d, "The power supply is a device battery, ignoring device."); return false; } diff --git a/src/shared/netif-sriov.c b/src/shared/netif-sriov.c index f621a9dde7e..f5df7fb392a 100644 --- a/src/shared/netif-sriov.c +++ b/src/shared/netif-sriov.c @@ -5,6 +5,7 @@ #include "alloc-util.h" #include "conf-parser.h" +#include "device-private.h" #include "device-util.h" #include "ether-addr-util.h" #include "netif-sriov.h" @@ -267,28 +268,11 @@ int sr_iov_set_netlink_message(SRIOV *sr_iov, SRIOVAttribute attr, sd_netlink_me } int sr_iov_get_num_vfs(sd_device *device, uint32_t *ret) { - const char *str; - uint32_t n; - int r; - - assert(device); - assert(ret); - - r = sd_device_get_sysattr_value(device, "device/sriov_numvfs", &str); - if (r < 0) - return r; - - r = safe_atou32(str, &n); - if (r < 0) - return r; - - *ret = n; - return 0; + return device_get_sysattr_u32(device, "device/sriov_numvfs", ret); } int sr_iov_set_num_vfs(sd_device *device, uint32_t num_vfs, OrderedHashmap *sr_iov_by_section) { char val[DECIMAL_STR_MAX(uint32_t)]; - const char *str; int r; assert(device); @@ -327,14 +311,9 @@ int sr_iov_set_num_vfs(sd_device *device, uint32_t num_vfs, OrderedHashmap *sr_i * maximum allowed number of VFs from the sriov_totalvfs sysattr. Note that the sysattr * currently exists only for PCI drivers. Hence, ignore -ENOENT. * TODO: netdevsim provides the information in debugfs. */ - r = sd_device_get_sysattr_value(device, "device/sriov_totalvfs", &str); + uint32_t max_num_vfs; + r = device_get_sysattr_u32(device, "device/sriov_totalvfs", &max_num_vfs); if (r >= 0) { - uint32_t max_num_vfs; - - r = safe_atou32(str, &max_num_vfs); - if (r < 0) - return log_device_debug_errno(device, r, "Failed to parse device/sriov_totalvfs sysfs attribute '%s': %m", str); - if (num_vfs > max_num_vfs) return log_device_debug_errno(device, SYNTHETIC_ERRNO(ERANGE), "Specified number of virtual functions is out of range. " diff --git a/src/sleep/battery-capacity.c b/src/sleep/battery-capacity.c index f6a1ed25ac3..168fff91c06 100644 --- a/src/sleep/battery-capacity.c +++ b/src/sleep/battery-capacity.c @@ -5,6 +5,7 @@ #include "alloc-util.h" #include "battery-capacity.h" #include "battery-util.h" +#include "device-private.h" #include "device-util.h" #include "extract-word.h" #include "fd-util.h" @@ -368,20 +369,13 @@ int battery_trip_point_alarm_exists(void) { return log_debug_errno(r, "Failed to initialize battery enumerator: %m"); FOREACH_DEVICE(e, dev) { - const char *alarm_attr; - int has_alarm; - has_battery = true; - r = sd_device_get_sysattr_value(dev, "alarm", &alarm_attr); + int has_alarm; + r = device_get_sysattr_int(dev, "alarm", &has_alarm); if (r < 0) return log_device_debug_errno(dev, r, "Failed to read battery alarm attribute: %m"); - r = safe_atoi(alarm_attr, &has_alarm); - if (r < 0) - return log_device_debug_errno(dev, r, - "Failed to parse battery alarm attribute '%s': %m", - alarm_attr); if (has_alarm <= 0) return false; } diff --git a/src/udev/udev-builtin-hwdb.c b/src/udev/udev-builtin-hwdb.c index 5cda0f9efd4..351c861037e 100644 --- a/src/udev/udev-builtin-hwdb.c +++ b/src/udev/udev-builtin-hwdb.c @@ -10,7 +10,6 @@ #include "device-util.h" #include "hwdb-util.h" #include "options.h" -#include "parse-util.h" #include "string-util.h" #include "udev-builtin.h" @@ -49,20 +48,16 @@ int udev_builtin_hwdb_lookup( } static const char* modalias_usb(sd_device *dev, char *s, size_t size) { - const char *v, *p, *n = NULL; - uint16_t vn, pn; + const char *n = NULL; + uint16_t v, p; - if (sd_device_get_sysattr_value(dev, "idVendor", &v) < 0) + if (device_get_sysattr_u16_full(dev, "idVendor", 16, &v) < 0) return NULL; - if (sd_device_get_sysattr_value(dev, "idProduct", &p) < 0) - return NULL; - if (safe_atoux16(v, &vn) < 0) - return NULL; - if (safe_atoux16(p, &pn) < 0) + if (device_get_sysattr_u16_full(dev, "idProduct", 16, &p) < 0) return NULL; (void) device_get_sysattr_safe_string(dev, "product", &n); - (void) snprintf(s, size, "usb:v%04Xp%04X:%s", vn, pn, strempty(n)); + (void) snprintf(s, size, "usb:v%04Xp%04X:%s", v, p, strempty(n)); return s; } diff --git a/src/udev/udev-builtin-input_id.c b/src/udev/udev-builtin-input_id.c index da4a9b33a45..8a317608897 100644 --- a/src/udev/udev-builtin-input_id.c +++ b/src/udev/udev-builtin-input_id.c @@ -131,17 +131,14 @@ static void get_cap_mask( } static struct input_id get_input_id(sd_device *dev) { - const char *v; struct input_id id = {}; - if (sd_device_get_sysattr_value(dev, "id/bustype", &v) >= 0) - (void) safe_atoux16(v, &id.bustype); - if (sd_device_get_sysattr_value(dev, "id/vendor", &v) >= 0) - (void) safe_atoux16(v, &id.vendor); - if (sd_device_get_sysattr_value(dev, "id/product", &v) >= 0) - (void) safe_atoux16(v, &id.product); - if (sd_device_get_sysattr_value(dev, "id/version", &v) >= 0) - (void) safe_atoux16(v, &id.version); + assert(dev); + + (void) device_get_sysattr_u16_full(dev, "id/bustype", 16, &id.bustype); + (void) device_get_sysattr_u16_full(dev, "id/vendor", 16, &id.vendor); + (void) device_get_sysattr_u16_full(dev, "id/product", 16, &id.product); + (void) device_get_sysattr_u16_full(dev, "id/version", 16, &id.version); return id; } diff --git a/src/udev/udev-builtin-path_id.c b/src/udev/udev-builtin-path_id.c index af4e2b2d40d..f5d33cd2466 100644 --- a/src/udev/udev-builtin-path_id.c +++ b/src/udev/udev-builtin-path_id.c @@ -472,18 +472,13 @@ static void handle_scsi_tape(sd_device *dev, char **path) { static int get_usb_revision(sd_device *dev) { uint8_t protocol; - const char *s; int r; assert(dev); /* Returns usb revision 1, 2, or 3. */ - r = sd_device_get_sysattr_value(dev, "bDeviceProtocol", &s); - if (r < 0) - return r; - - r = safe_atou8_full(s, 16, &protocol); + r = device_get_sysattr_u8_full(dev, "bDeviceProtocol", 16, &protocol); if (r < 0) return r; @@ -491,11 +486,10 @@ static int get_usb_revision(sd_device *dev) { case USB_HUB_PR_HS_NO_TT: /* Full speed hub (USB1) or Hi-speed hub without TT (USB2) */ /* See speed_show() in drivers/usb/core/sysfs.c of the kernel. */ - r = sd_device_get_sysattr_value(dev, "speed", &s); + r = device_get_sysattr_streq(dev, "speed", "480"); if (r < 0) return r; - - if (streq(s, "480")) + if (r > 0) return 2; return 1;