#include "hashmap.h"
#include "set.h"
+#include "time-util.h"
struct sd_device {
unsigned n_ref;
int device_set_devnum(sd_device *device, const char *major, const char *minor);
int device_set_subsystem(sd_device *device, const char *_subsystem);
int device_set_driver(sd_device *device, const char *_driver);
-int device_set_usec_initialized(sd_device *device, const char *initialized);
+int device_set_usec_initialized(sd_device *device, usec_t when);
DeviceAction device_action_from_string(const char *s) _pure_;
const char *device_action_to_string(DeviceAction a) _const_;
}
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;
+ usec_t when;
assert(device);
if (device_old && device_old->usec_initialized > 0)
- usec_initialized = device_old->usec_initialized;
+ when = device_old->usec_initialized;
else
- usec_initialized = now(CLOCK_MONOTONIC);
-
- r = snprintf(num, sizeof(num), USEC_FMT, usec_initialized);
- if (r < 0)
- return -errno;
+ when = now(CLOCK_MONOTONIC);
- r = device_set_usec_initialized(device, num);
- if (r < 0)
- return r;
-
- return 0;
+ return device_set_usec_initialized(device, when);
}
uint64_t device_get_properties_generation(sd_device *device) {
if (r < 0)
return log_device_debug_errno(device, r, "sd-device: Failed to set devname to '%s': %m", value);
} else if (streq(key, "USEC_INITIALIZED")) {
- r = device_set_usec_initialized(device, value);
+ usec_t t;
+
+ r = safe_atou64(value, &t);
+ if (r < 0)
+ return log_device_debug_errno(device, r, "sd-device: Failed to parse timestamp '%s': %m", value);
+
+ r = device_set_usec_initialized(device, t);
if (r < 0)
return log_device_debug_errno(device, r, "sd-device: Failed to set usec-initialized to '%s': %m", value);
} else if (streq(key, "DRIVER")) {
#include "set.h"
#include "socket-util.h"
#include "stat-util.h"
+#include "stdio-util.h"
#include "string-util.h"
#include "strv.h"
#include "strxcpyx.h"
return device_add_property_internal(device, key, value);
}
-int device_set_usec_initialized(sd_device *device, const char *initialized) {
- uint64_t usec_initialized;
+int device_set_usec_initialized(sd_device *device, usec_t when) {
+ char s[DECIMAL_STR_MAX(usec_t)];
int r;
assert(device);
- assert(initialized);
- r = safe_atou64(initialized, &usec_initialized);
- if (r < 0)
- return r;
+ xsprintf(s, USEC_FMT, when);
- r = device_add_property_internal(device, "USEC_INITIALIZED", initialized);
+ r = device_add_property_internal(device, "USEC_INITIALIZED", s);
if (r < 0)
return r;
- device->usec_initialized = usec_initialized;
-
+ device->usec_initialized = when;
return 0;
}
return r;
break;
- case 'I':
- r = device_set_usec_initialized(device, value);
+ case 'I': {
+ usec_t t;
+
+ r = safe_atou64(value, &t);
+ if (r < 0)
+ return r;
+
+ r = device_set_usec_initialized(device, t);
if (r < 0)
return r;
break;
+ }
case 'L':
r = safe_atoi(value, &device->devlink_priority);
if (r < 0)