};
/**
- * udev_device_get_devnum:
+ * udev_device_get_seqnum:
* @udev_device: udev device
*
* This is only valid if the device was received through a monitor. Devices read from
udev_device_add_tag(udev_device, tag);
}
}
+ } else if (strncmp(property, "USEC_INITIALIZED=", 19) == 0) {
+ udev_device_set_usec_initialized(udev_device, strtoull(&property[19], NULL, 10));
} else if (strncmp(property, "DRIVER=", 7) == 0) {
udev_device_set_driver(udev_device, &property[7]);
} else if (strncmp(property, "ACTION=", 7) == 0) {
void udev_device_set_usec_initialized(struct udev_device *udev_device, unsigned long long usec_initialized)
{
+ char num[32];
+
udev_device->usec_initialized = usec_initialized;
+ snprintf(num, sizeof(num), "%llu", usec_initialized);
+ udev_device_add_property(udev_device, "USEC_INITIALIZED", num);
}
/**
}
if (S_ISLNK(statbuf.st_mode)) {
- char target[UTIL_NAME_SIZE];
- int len;
- char *pos;
-
- /* some core links return the last element of the target path */
- if (strcmp(sysattr, "driver") != 0 &&
- strcmp(sysattr, "subsystem") != 0 &&
- strcmp(sysattr, "module") != 0)
- goto out;
+ struct udev_device *dev;
- len = readlink(path, target, sizeof(target));
- if (len <= 0 || len == sizeof(target))
+ /*
+ * Some core links return only the last element of the target path,
+ * these are just values, the paths should not be exposed.
+ */
+ if (strcmp(sysattr, "driver") == 0 ||
+ strcmp(sysattr, "subsystem") == 0 ||
+ strcmp(sysattr, "module") == 0) {
+ if (util_get_sys_core_link_value(udev_device->udev, sysattr,
+ udev_device->syspath, value, sizeof(value)) < 0)
+ return NULL;
+ dbg(udev_device->udev, "cache '%s' with link value '%s'\n", sysattr, value);
+ list_entry = udev_list_entry_add(&udev_device->sysattr_value_list, sysattr, value);
+ val = udev_list_entry_get_value(list_entry);
goto out;
- target[len] = '\0';
+ }
- pos = strrchr(target, '/');
- if (pos != NULL) {
- pos = &pos[1];
- dbg(udev_device->udev, "cache '%s' with link value '%s'\n", sysattr, pos);
- list_entry = udev_list_entry_add(&udev_device->sysattr_value_list, sysattr, pos);
+ /* resolve link to a device and return its syspath */
+ util_strscpyl(path, sizeof(path), udev_device->syspath, "/", sysattr, NULL);
+ dev = udev_device_new_from_syspath(udev_device->udev, path);
+ if (dev != NULL) {
+ list_entry = udev_list_entry_add(&udev_device->sysattr_value_list, sysattr,
+ udev_device_get_syspath(dev));
val = udev_list_entry_get_value(list_entry);
+ udev_device_unref(dev);
}
goto out;