From: Lennart Poettering Date: Tue, 20 Apr 2021 14:01:53 +0000 (+0200) Subject: sd-device: add API to query from when a udev database entry is X-Git-Tag: v249-rc1~380^2~3 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8626b43be42b9db065f8fdf2b057990ef511150e;p=thirdparty%2Fsystemd.git sd-device: add API to query from when a udev database entry is 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. --- diff --git a/src/libsystemd/libsystemd.sym b/src/libsystemd/libsystemd.sym index b025b550267..996bf25d6c2 100644 --- a/src/libsystemd/libsystemd.sym +++ b/src/libsystemd/libsystemd.sym @@ -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; diff --git a/src/libsystemd/sd-device/sd-device.c b/src/libsystemd/sd-device/sd-device.c index 200e2077ee6..4b7f22e2076 100644 --- a/src/libsystemd/sd-device/sd-device.c +++ b/src/libsystemd/sd-device/sd-device.c @@ -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; diff --git a/src/systemd/sd-device.h b/src/systemd/sd-device.h index e760e03f35a..8b7b361295e 100644 --- a/src/systemd/sd-device.h +++ b/src/systemd/sd-device.h @@ -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);