int device_ensure_usec_initialized(sd_device *device, sd_device *device_old) { usec_t when; assert(device); if (device_old && device_old->usec_initialized > 0) when = device_old->usec_initialized; else when = now(CLOCK_MONOTONIC); return device_set_usec_initialized(device, when); }
static int handle_db_line(sd_device *device, char key, const char *value) { char *path; int r; assert(device); assert(value); switch (key) { case 'S': path = strjoina("/dev/", value); r = device_add_devlink(device, path); if (r < 0) return r; break; case 'L': r = safe_atoi(value, &device->devlink_priority); if (r < 0) return r; break; case 'E': r = device_add_property_internal_from_string(device, value); if (r < 0) return r; break; case 'G': r = device_add_tag(device, value); if (r < 0) return r; break; case 'W': r = safe_atoi(value, &device->watch_handle); if (r < 0) return r; break; case 'I': r = device_set_usec_initialized(device, value); if (r < 0) return r; break; default: log_debug("device db: unknown key '%c'", key); } return 0; }
int device_ensure_usec_initialized(sd_device *device, sd_device *device_old) { char num[DECIMAL_STR_MAX(usec_t)]; usec_t usec_initialized; int r; assert(device); if (device_old && device_old->usec_initialized > 0) usec_initialized = device_old->usec_initialized; else usec_initialized = now(CLOCK_MONOTONIC); r = snprintf(num, sizeof(num), USEC_FMT, usec_initialized); if (r < 0) return -errno; r = device_set_usec_initialized(device, num); if (r < 0) return r; return 0; }
static int device_amend(sd_device *device, const char *key, const char *value) { int r; assert(device); assert(key); assert(value); if (streq(key, "DEVPATH")) { char *path; path = strjoina("/sys", value); /* the caller must verify or trust this data (e.g., if it comes from the kernel) */ r = device_set_syspath(device, path, false); if (r < 0) return log_debug_errno(r, "sd-device: could not set syspath to '%s': %m", path); } else if (streq(key, "SUBSYSTEM")) { r = device_set_subsystem(device, value); if (r < 0) return log_debug_errno(r, "sd-device: could not set subsystem to '%s': %m", value); } else if (streq(key, "DEVTYPE")) { r = device_set_devtype(device, value); if (r < 0) return log_debug_errno(r, "sd-device: could not set devtype to '%s': %m", value); } else if (streq(key, "DEVNAME")) { r = device_set_devname(device, value); if (r < 0) return log_debug_errno(r, "sd-device: could not set devname to '%s': %m", value); } else if (streq(key, "USEC_INITIALIZED")) { r = device_set_usec_initialized(device, value); if (r < 0) return log_debug_errno(r, "sd-device: could not set usec-initialized to '%s': %m", value); } else if (streq(key, "DRIVER")) { r = device_set_driver(device, value); if (r < 0) return log_debug_errno(r, "sd-device: could not set driver to '%s': %m", value); } else if (streq(key, "IFINDEX")) { r = device_set_ifindex(device, value); if (r < 0) return log_debug_errno(r, "sd-device: could not set ifindex to '%s': %m", value); } else if (streq(key, "DEVMODE")) { r = device_set_devmode(device, value); if (r < 0) return log_debug_errno(r, "sd-device: could not set devmode to '%s': %m", value); } else if (streq(key, "DEVUID")) { r = device_set_devuid(device, value); if (r < 0) return log_debug_errno(r, "sd-device: could not set devuid to '%s': %m", value); } else if (streq(key, "DEVGID")) { r = device_set_devgid(device, value); if (r < 0) return log_debug_errno(r, "sd-device: could not set devgid to '%s': %m", value); } else if (streq(key, "DEVLINKS")) { const char *word, *state; size_t l; FOREACH_WORD(word, l, value, state) { char devlink[l + 1]; strncpy(devlink, word, l); devlink[l] = '\0'; r = device_add_devlink(device, devlink); if (r < 0) return log_debug_errno(r, "sd-device: could not add devlink '%s': %m", devlink); } } else if (streq(key, "TAGS")) {