summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorScott James Remnant <scott@ubuntu.com>2009-02-23 17:31:26 +0000
committerScott James Remnant <scott@ubuntu.com>2009-02-23 17:31:26 +0000
commitd7ce7539d327780fba18c8ae8951e1ff50cd0b3e (patch)
tree1d152ffaae0d1b267acec9ecc1dced03481a0242
parent03e0170db3ef69c70db7cd74e6689c7b78c91c3d (diff)
Allow watch handle to be stored in the udevdb.
-rw-r--r--udev/lib/libudev-device-db-write.c4
-rw-r--r--udev/lib/libudev-device.c18
-rw-r--r--udev/lib/libudev-private.h2
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 */