int udev_node_update_old_links(sd_device *dev, sd_device *dev_old) { const char *name, *devpath; int r; assert(dev); assert(dev_old); r = sd_device_get_devpath(dev, &devpath); if (r < 0) return log_device_debug_errno(dev, r, "Failed to get devpath: %m"); /* update possible left-over symlinks */ FOREACH_DEVICE_DEVLINK(dev_old, name) { const char *name_current; bool found = false; /* check if old link name still belongs to this device */ FOREACH_DEVICE_DEVLINK(dev, name_current) if (streq(name, name_current)) { found = true; break; } if (found) continue; log_device_debug(dev, "Updating old name, '%s' no longer belonging to '%s'", name, devpath); link_update(dev, name, false); } return 0; }
static int device_monitor_handler(sd_device_monitor *monitor, sd_device *device, void *userdata) { const char *action = NULL, *devpath = NULL, *subsystem = NULL; MonitorNetlinkGroup group = PTR_TO_INT(userdata); struct timespec ts; assert(device); assert(IN_SET(group, MONITOR_GROUP_UDEV, MONITOR_GROUP_KERNEL)); (void) sd_device_get_property_value(device, "ACTION", &action); (void) sd_device_get_devpath(device, &devpath); (void) sd_device_get_subsystem(device, &subsystem); assert_se(clock_gettime(CLOCK_MONOTONIC, &ts) == 0); printf("%-6s[%"PRI_TIME".%06"PRI_NSEC"] %-8s %s (%s)\n", group == MONITOR_GROUP_UDEV ? "UDEV" : "KERNEL", ts.tv_sec, (nsec_t)ts.tv_nsec/1000, action, devpath, subsystem); if (arg_show_property) { const char *key, *value; FOREACH_DEVICE_PROPERTY(device, key, value) printf("%s=%s\n", key, value); printf("\n"); } return 0; }
/** * udev_device_get_devpath: * @udev_device: udev device * * Retrieve the kernel devpath value of the udev device. The path * does not contain the sys mount point, and starts with a '/'. * * Returns: the devpath of the udev device **/ _public_ const char *udev_device_get_devpath(struct udev_device *udev_device) { const char *devpath; int r; assert_return_errno(udev_device, NULL, EINVAL); r = sd_device_get_devpath(udev_device->device, &devpath); if (r < 0) { errno = -r; return NULL; } return devpath; }