int device_opendir(sd_device *device, const char *subdir, DIR **ret);
+int device_get_sysnum_unsigned(sd_device *device, unsigned *ret);
int device_get_property_bool(sd_device *device, const char *key);
int device_get_property_int(sd_device *device, const char *key, int *ret);
int device_get_sysattr_int(sd_device *device, const char *sysattr, int *ret_value);
return 0;
}
+int device_get_sysnum_unsigned(sd_device *device, unsigned *ret) {
+ int r;
+
+ assert(device);
+
+ const char *s;
+ r = sd_device_get_sysnum(device, &s);
+ if (r < 0)
+ return r;
+
+ unsigned n;
+ r = safe_atou_full(s, SAFE_ATO_REFUSE_PLUS_MINUS | SAFE_ATO_REFUSE_LEADING_WHITESPACE | 10, &n);
+ if (r < 0)
+ return r;
+
+ if (ret)
+ *ret = n;
+ return 0;
+}
+
_public_ int sd_device_get_action(sd_device *device, sd_device_action_t *ret) {
assert_return(device, -EINVAL);
assert_se(val < sysname + strlen(sysname));
assert_se(in_charset(val, DIGITS));
assert_se(!ascii_isdigit(val[-1]));
+ r = device_get_sysnum_unsigned(d, NULL);
+ ASSERT_TRUE(r >= 0 || r == -ERANGE); /* sysnum may be too large. */
} else
assert_se(r == -ENOENT);