diff options
author | Scott James Remnant <scott@ubuntu.com> | 2009-02-23 17:31:26 +0000 |
---|---|---|
committer | Scott James Remnant <scott@ubuntu.com> | 2009-02-23 17:31:26 +0000 |
commit | d7ce7539d327780fba18c8ae8951e1ff50cd0b3e (patch) | |
tree | 1d152ffaae0d1b267acec9ecc1dced03481a0242 | |
parent | 03e0170db3ef69c70db7cd74e6689c7b78c91c3d (diff) |
Allow watch handle to be stored in the udevdb.
-rw-r--r-- | udev/lib/libudev-device-db-write.c | 4 | ||||
-rw-r--r-- | udev/lib/libudev-device.c | 18 | ||||
-rw-r--r-- | udev/lib/libudev-private.h | 2 |
3 files changed, 24 insertions, 0 deletions
diff --git a/udev/lib/libudev-device-db-write.c b/udev/lib/libudev-device-db-write.c index 11e0ab5f60..e96f3101c6 100644 --- a/udev/lib/libudev-device-db-write.c +++ b/udev/lib/libudev-device-db-write.c @@ -64,6 +64,8 @@ int udev_device_update_db(struct udev_device *udev_device) goto file; if (udev_device_get_event_timeout(udev_device) >= 0) goto file; + if (udev_device_get_watch_handle(udev_device) >= 0) + goto file; if (udev_device_get_devnode(udev_device) == NULL) goto out; @@ -109,6 +111,8 @@ file: fprintf(f, "A:%u\n", udev_device_get_num_fake_partitions(udev_device)); if (udev_device_get_ignore_remove(udev_device)) fprintf(f, "R:%u\n", udev_device_get_ignore_remove(udev_device)); + if (udev_device_get_watch_handle(udev_device) >= 0) + fprintf(f, "W:%u\n", udev_device_get_watch_handle(udev_device)); udev_list_entry_foreach(list_entry, udev_device_get_properties_list_entry(udev_device)) { if (!udev_list_entry_get_flag(list_entry)) continue; diff --git a/udev/lib/libudev-device.c b/udev/lib/libudev-device.c index fc881fb3fd..1a9d0a1e69 100644 --- a/udev/lib/libudev-device.c +++ b/udev/lib/libudev-device.c @@ -58,6 +58,7 @@ struct udev_device { int devlink_priority; int refcount; dev_t devnum; + int watch_handle; unsigned int parent_set:1; unsigned int subsystem_set:1; unsigned int devtype_set:1; @@ -176,6 +177,9 @@ int udev_device_read_db(struct udev_device *udev_device) case 'E': udev_device_add_property_from_string(udev_device, val); break; + case 'W': + udev_device_set_watch_handle(udev_device, atoi(val)); + break; } } fclose(f); @@ -251,6 +255,7 @@ struct udev_device *device_new(struct udev *udev) udev_list_init(&udev_device->properties_list); udev_list_init(&udev_device->sysattr_list); udev_device->event_timeout = -1; + udev_device->watch_handle = -1; /* copy global properties */ udev_list_entry_foreach(list_entry, udev_get_properties_list_entry(udev)) udev_device_add_property(udev_device, @@ -1291,3 +1296,16 @@ int udev_device_set_ignore_remove(struct udev_device *udev_device, int ignore) udev_device->ignore_remove = ignore; return 0; } + +int udev_device_get_watch_handle(struct udev_device *udev_device) +{ + if (!udev_device->info_loaded) + device_load_info(udev_device); + return udev_device->watch_handle; +} + +int udev_device_set_watch_handle(struct udev_device *udev_device, int handle) +{ + udev_device->watch_handle = handle; + return 0; +} diff --git a/udev/lib/libudev-private.h b/udev/lib/libudev-private.h index 0d752bb1e5..0627aea071 100644 --- a/udev/lib/libudev-private.h +++ b/udev/lib/libudev-private.h @@ -84,6 +84,8 @@ extern int udev_device_get_devlink_priority(struct udev_device *udev_device); extern int udev_device_set_devlink_priority(struct udev_device *udev_device, int prio); extern int udev_device_get_ignore_remove(struct udev_device *udev_device); extern int udev_device_set_ignore_remove(struct udev_device *udev_device, int ignore); +extern int udev_device_get_watch_handle(struct udev_device *udev_device); +extern int udev_device_set_watch_handle(struct udev_device *udev_device, int handle); extern void udev_device_set_info_loaded(struct udev_device *device); /* libudev-device-db-write.c */ |