]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-device: add API to query from when a udev database entry is
authorLennart Poettering <lennart@poettering.net>
Tue, 20 Apr 2021 14:01:53 +0000 (16:01 +0200)
committerLennart Poettering <lennart@poettering.net>
Tue, 20 Apr 2021 15:14:10 +0000 (17:14 +0200)
We already store a CLOCK_MONOTONIC timestamp for each device appearance,
let' make this queriable.

This is useful to determine whether a udev device database entry is from
a current appearance of the device or a previous one, by comparing it
with appropriately taken timestamps.

src/libsystemd/libsystemd.sym
src/libsystemd/sd-device/sd-device.c
src/systemd/sd-device.h

index b025b550267426f787cef377679d54695d873882..996bf25d6c220e6ae987b46134681936b545ea4b 100644 (file)
@@ -756,4 +756,5 @@ LIBSYSTEMD_249 {
 global:
         sd_device_monitor_filter_add_match_sysattr;
         sd_device_monitor_filter_add_match_parent;
+        sd_device_get_usec_initialized;
 } LIBSYSTEMD_248;
index 200e2077ee689f8185b6714a25cc032c200e6d59..4b7f22e2076ffc2702d0b83c8cd98453062d3483 100644 (file)
@@ -1428,6 +1428,27 @@ _public_ int sd_device_get_is_initialized(sd_device *device) {
         return device->is_initialized;
 }
 
+_public_ int sd_device_get_usec_initialized(sd_device *device, uint64_t *ret) {
+        int r;
+
+        assert_return(device, -EINVAL);
+
+        r = device_read_db(device);
+        if (r < 0)
+                return r;
+
+        if (!device->is_initialized)
+                return -EBUSY;
+
+        if (device->usec_initialized == 0)
+                return -ENODATA;
+
+        if (ret)
+                *ret = device->usec_initialized;
+
+        return 0;
+}
+
 _public_ int sd_device_get_usec_since_initialized(sd_device *device, uint64_t *usec) {
         usec_t now_ts;
         int r;
index e760e03f35a9b413f5f5193a41c9e5e55f8bfb4e..8b7b361295ecc9d023247850f07bf85b7278e2b9 100644 (file)
@@ -79,6 +79,7 @@ int sd_device_get_action(sd_device *device, sd_device_action_t *ret);
 int sd_device_get_seqnum(sd_device *device, uint64_t *ret);
 
 int sd_device_get_is_initialized(sd_device *device);
+int sd_device_get_usec_initialized(sd_device *device, uint64_t *usec);
 int sd_device_get_usec_since_initialized(sd_device *device, uint64_t *usec);
 
 const char *sd_device_get_tag_first(sd_device *device);