aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKay Sievers <kay.sievers@vrfy.org>2011-08-17 21:05:18 +0200
committerKay Sievers <kay.sievers@vrfy.org>2011-08-17 21:05:18 +0200
commita20a57a7bfbc6edd7602c135ca78f3e56878badb (patch)
tree4460dac44dfccd5f5e380de17c0b28de8bc79711
parentcdfdc85fb5728c844460c67641bea7197e104b12 (diff)
downloadudev-a20a57a7bfbc6edd7602c135ca78f3e56878badb.tar.gz
export USEC_INITIALIZED= and take timestamp on message receive time
-rw-r--r--libudev/libudev-device.c6
-rw-r--r--udev/udev-event.c2
-rw-r--r--udev/udevd.c1
3 files changed, 8 insertions, 1 deletions
diff --git a/libudev/libudev-device.c b/libudev/libudev-device.c
index 273e5cb5..064ffad9 100644
--- a/libudev/libudev-device.c
+++ b/libudev/libudev-device.c
@@ -437,6 +437,8 @@ void udev_device_add_property_from_string_parse(struct udev_device *udev_device,
udev_device_add_tag(udev_device, tag);
}
}
+ } else if (strncmp(property, "USEC_INITIALIZED=", 19) == 0) {
+ udev_device_set_usec_initialized(udev_device, strtoull(&property[19], NULL, 10));
} else if (strncmp(property, "DRIVER=", 7) == 0) {
udev_device_set_driver(udev_device, &property[7]);
} else if (strncmp(property, "ACTION=", 7) == 0) {
@@ -1322,7 +1324,11 @@ unsigned long long udev_device_get_usec_initialized(struct udev_device *udev_dev
void udev_device_set_usec_initialized(struct udev_device *udev_device, unsigned long long usec_initialized)
{
+ char num[32];
+
udev_device->usec_initialized = usec_initialized;
+ snprintf(num, sizeof(num), "%llu", usec_initialized);
+ udev_device_add_property(udev_device, "USEC_INITIALIZED", num);
}
/**
diff --git a/udev/udev-event.c b/udev/udev-event.c
index 391fce81..3c1a3e7a 100644
--- a/udev/udev-event.c
+++ b/udev/udev-event.c
@@ -1040,7 +1040,7 @@ int udev_event_execute_rules(struct udev_event *event, struct udev_rules *rules,
/* preserve old, or get new initialization timestamp */
if (event->dev_db != NULL && udev_device_get_usec_initialized(event->dev_db) > 0)
udev_device_set_usec_initialized(event->dev, udev_device_get_usec_initialized(event->dev_db));
- else
+ else if (udev_device_get_usec_initialized(event->dev) == 0)
udev_device_set_usec_initialized(event->dev, now_usec());
/* (re)write database file */
diff --git a/udev/udevd.c b/udev/udevd.c
index f1a31e7a..325ad034 100644
--- a/udev/udevd.c
+++ b/udev/udevd.c
@@ -1655,6 +1655,7 @@ int main(int argc, char *argv[])
dev = udev_monitor_receive_device(monitor);
if (dev != NULL)
+ udev_device_set_usec_initialized(dev, now_usec());
if (event_queue_insert(dev) < 0)
udev_device_unref(dev);
}