]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-device: pass timestamp internally as usec_t not char*
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 14 Dec 2018 10:33:17 +0000 (11:33 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sun, 16 Dec 2018 19:58:45 +0000 (20:58 +0100)
src/libsystemd/sd-device/device-internal.h
src/libsystemd/sd-device/device-private.c
src/libsystemd/sd-device/sd-device.c

index 2a9e1a789b16321ea6cfff1823ac9c329802212d..0a0a24aa8eef0a94add31b931f47c90f1d3cd7eb 100644 (file)
@@ -5,6 +5,7 @@
 
 #include "hashmap.h"
 #include "set.h"
+#include "time-util.h"
 
 struct sd_device {
         unsigned n_ref;
@@ -106,7 +107,7 @@ int device_set_devtype(sd_device *device, const char *_devtype);
 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_;
index b1b6f6f20acb1d75038ead9683710af224cd4444..36beb3e7dfa0a2fe07e8ef95697e9b9b06dbb952 100644 (file)
@@ -60,26 +60,16 @@ void device_set_is_initialized(sd_device *device) {
 }
 
 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) {
@@ -223,7 +213,13 @@ static int device_amend(sd_device *device, const char *key, const char *value) {
                 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")) {
index 6a1c7ff09921be041ca08d2d6fabcbfe9ba7d1d0..db58615df53df64109360cdd469ac5d17ad5fcbf 100644 (file)
@@ -22,6 +22,7 @@
 #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"
@@ -1149,23 +1150,19 @@ static int device_add_property_internal_from_string(sd_device *device, const cha
         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;
 }
 
@@ -1196,12 +1193,19 @@ static int handle_db_line(sd_device *device, char key, const char *value) {
                         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)