From f183b6ed766a18835d53dc1e36a4e98756ebd0b7 Mon Sep 17 00:00:00 2001 From: Kay Sievers Date: Thu, 16 Oct 2008 13:51:29 +0200 Subject: [PATCH] libudev: add global property list --- extras/ata_id/Makefile.am | 1 + extras/cdrom_id/Makefile.am | 1 + extras/edd_id/Makefile.am | 1 + extras/floppy/Makefile.am | 1 + extras/fstab_import/Makefile.am | 1 + extras/scsi_id/Makefile.am | 1 + extras/volume_id/Makefile.am | 1 + udev/lib/libudev-private.h | 2 ++ udev/lib/libudev.c | 30 +++++++++++++++++++++++++++++- 9 files changed, 38 insertions(+), 1 deletion(-) diff --git a/extras/ata_id/Makefile.am b/extras/ata_id/Makefile.am index 34ded29de..47ab0d663 100644 --- a/extras/ata_id/Makefile.am +++ b/extras/ata_id/Makefile.am @@ -8,6 +8,7 @@ ata_id_SOURCES = \ ata_id.c \ ../../udev/lib/libudev.h \ ../../udev/lib/libudev.c \ + ../../udev/lib/libudev-list.c \ ../../udev/lib/libudev-util.c dist_man_MANS = \ diff --git a/extras/cdrom_id/Makefile.am b/extras/cdrom_id/Makefile.am index f8c4bbff0..bb97d96dc 100644 --- a/extras/cdrom_id/Makefile.am +++ b/extras/cdrom_id/Makefile.am @@ -12,6 +12,7 @@ cdrom_id_SOURCES = \ cdrom_id.c \ ../../udev/lib/libudev.h \ ../../udev/lib/libudev.c \ + ../../udev/lib/libudev-list.c \ ../../udev/lib/libudev-util.c dist_man_MANS = \ diff --git a/extras/edd_id/Makefile.am b/extras/edd_id/Makefile.am index 67199fd23..28ff8aa46 100644 --- a/extras/edd_id/Makefile.am +++ b/extras/edd_id/Makefile.am @@ -12,6 +12,7 @@ edd_id_SOURCES = \ edd_id.c \ ../../udev/lib/libudev.h \ ../../udev/lib/libudev.c \ + ../../udev/lib/libudev-list.c \ ../../udev/lib/libudev-util.c dist_man_MANS = \ diff --git a/extras/floppy/Makefile.am b/extras/floppy/Makefile.am index 357129e33..0b154498d 100644 --- a/extras/floppy/Makefile.am +++ b/extras/floppy/Makefile.am @@ -8,6 +8,7 @@ create_floppy_devices_SOURCES = \ create_floppy_devices.c \ ../../udev/lib/libudev.h \ ../../udev/lib/libudev.c \ + ../../udev/lib/libudev-list.c \ ../../udev/lib/libudev-util.c \ ../../udev/udev_utils.c diff --git a/extras/fstab_import/Makefile.am b/extras/fstab_import/Makefile.am index c1204782b..d16c681ad 100644 --- a/extras/fstab_import/Makefile.am +++ b/extras/fstab_import/Makefile.am @@ -12,6 +12,7 @@ fstab_import_SOURCES = \ fstab_import.c \ ../../udev/lib/libudev.h \ ../../udev/lib/libudev.c \ + ../../udev/lib/libudev-list.c \ ../../udev/lib/libudev-util.c distclean-local: diff --git a/extras/scsi_id/Makefile.am b/extras/scsi_id/Makefile.am index e6798eea6..08da1c9de 100644 --- a/extras/scsi_id/Makefile.am +++ b/extras/scsi_id/Makefile.am @@ -12,6 +12,7 @@ scsi_id_SOURCES = \ bsg.h \ ../../udev/lib/libudev.h \ ../../udev/lib/libudev.c \ + ../../udev/lib/libudev-list.c \ ../../udev/lib/libudev-util.c dist_sysconf_DATA = \ diff --git a/extras/volume_id/Makefile.am b/extras/volume_id/Makefile.am index 5b68e4321..c58f1a878 100644 --- a/extras/volume_id/Makefile.am +++ b/extras/volume_id/Makefile.am @@ -11,6 +11,7 @@ vol_id_SOURCES = \ vol_id.c \ ../../udev/lib/libudev.h \ ../../udev/lib/libudev.c \ + ../../udev/lib/libudev-list.c \ ../../udev/lib/libudev-util.c vol_id_LDADD = \ diff --git a/udev/lib/libudev-private.h b/udev/lib/libudev-private.h index e9f2c9893..60d995aa7 100644 --- a/udev/lib/libudev-private.h +++ b/udev/lib/libudev-private.h @@ -50,6 +50,8 @@ void udev_log(struct udev *udev, extern struct udev_device *device_new(struct udev *udev); extern const char *udev_get_rules_path(struct udev *udev); extern int udev_get_run(struct udev *udev); +extern struct udev_list_entry *udev_add_property(struct udev *udev, const char *key, const char *value); +extern struct udev_list_entry *udev_get_properties_list_entry(struct udev *udev); /* libudev-device */ extern int udev_device_set_syspath(struct udev_device *udev_device, const char *syspath); diff --git a/udev/lib/libudev.c b/udev/lib/libudev.c index 3f7d0e547..c698be6e4 100644 --- a/udev/lib/libudev.c +++ b/udev/lib/libudev.c @@ -38,6 +38,7 @@ struct udev { char *sys_path; char *dev_path; char *rules_path; + struct udev_list_node properties_list; int log_priority; int run; }; @@ -102,6 +103,7 @@ struct udev *udev_new(void) udev->refcount = 1; udev->log_fn = log_stderr; udev->log_priority = LOG_ERR; + udev_list_init(&udev->properties_list); udev->run = 1; udev->dev_path = strdup(UDEV_PREFIX "/dev"); udev->sys_path = strdup("/sys"); @@ -117,6 +119,7 @@ struct udev *udev_new(void) free(udev->sys_path); udev->sys_path = strdup(env); util_remove_trailing_chars(udev->sys_path, '/'); + udev_add_property(udev, "SYSFS_PATH", udev->sys_path); } env = getenv("UDEV_RUN"); @@ -219,11 +222,12 @@ struct udev *udev_new(void) free(udev->dev_path); udev->dev_path = strdup(env); util_remove_trailing_chars(udev->dev_path, '/'); + udev_add_property(udev, "UDEV_ROOT", udev->dev_path); } env = getenv("UDEV_LOG"); if (env != NULL) - udev->log_priority = util_log_priority(env); + udev_set_log_priority(udev, util_log_priority(env)); if (udev->dev_path == NULL || udev->sys_path == NULL) goto err; @@ -274,6 +278,7 @@ void udev_unref(struct udev *udev) udev->refcount--; if (udev->refcount > 0) return; + udev_list_cleanup(udev, &udev->properties_list); free(udev->dev_path); free(udev->sys_path); free(udev->rules_path); @@ -307,7 +312,11 @@ int udev_get_log_priority(struct udev *udev) void udev_set_log_priority(struct udev *udev, int priority) { + char num[32]; + udev->log_priority = priority; + snprintf(num, sizeof(num), "%u", udev->log_priority); + udev_add_property(udev, "UDEV_LOG", num); } const char *udev_get_rules_path(struct udev *udev) @@ -353,3 +362,22 @@ const char *udev_get_dev_path(struct udev *udev) return NULL; return udev->dev_path; } + +struct udev_list_entry *udev_add_property(struct udev *udev, const char *key, const char *value) +{ + if (value == NULL) { + struct udev_list_entry *list_entry; + + list_entry = udev_get_properties_list_entry(udev); + list_entry = udev_list_entry_get_by_name(list_entry, key); + if (list_entry != NULL) + udev_list_entry_remove(list_entry); + return NULL; + } + return udev_list_entry_add(udev, &udev->properties_list, key, value, 1, 0); +} + +struct udev_list_entry *udev_get_properties_list_entry(struct udev *udev) +{ + return udev_list_get_entry(&udev->properties_list); +} -- 2.30.2