[PATCH 8/8] compute udis that are unique in the gdl and tdl

Rob Taylor rob.taylor at codethink.co.uk
Thu Mar 6 15:42:58 PST 2008


Introduces hald_compute_udi which computes a udi thats unique in both the
tdl and gdl and uses it everywhere relvent. This is necessary when we're
processing events in parallel as otherwise its possible to get a race 
condition
with two devices added with the same name. As part of this patch,
hal_util_compute_udi grwos a varargs version and no longer makes the 
computer
udi unique. I've also added a hal_util_make_udi_unique for use in those 
places
where hal_util_compute_udi was only used to check a udi was unique when
inserting into the gdl.
---
  hald/freebsd/hf-util.c         |    2 +-
  hald/hald.c                    |   29 ++++
  hald/hald.h                    |    2 +
  hald/hald_dbus.c               |    2 +-
  hald/linux/acpi.c              |    6 +-
  hald/linux/apm.c               |   16 +-
  hald/linux/blockdev.c          |   48 +++---
  hald/linux/device.c            |  354 
++++++++++++++++++++--------------------
  hald/linux/pmu.c               |   16 +-
  hald/solaris/devinfo.c         |    8 +-
  hald/solaris/devinfo_storage.c |   48 +++---
  hald/solaris/devinfo_usb.c     |   16 +-
  hald/util.c                    |   49 ++++--
  hald/util.h                    |    4 +
  14 files changed, 326 insertions(+), 274 deletions(-)

diff --git a/hald/freebsd/hf-util.c b/hald/freebsd/hf-util.c
index 8d6b07f..fe9c9ee 100644
--- a/hald/freebsd/hf-util.c
+++ b/hald/freebsd/hf-util.c
@@ -292,7 +292,7 @@ hf_device_set_full_udi (HalDevice *device, const 
char *format, ...)
    requested_udi = g_strdup_vprintf(format, args);
    va_end(args);

-  hal_util_compute_udi(pending_gdl, actual_udi, sizeof(actual_udi), 
"%s", requested_udi);
+  hal_util_make_udi_unique (pending_gdl, actual_udi, 
sizeof(actual_udi), requested_udi);

    hf_pending_gdl_free(pending_gdl);
    g_free(requested_udi);
diff --git a/hald/hald.c b/hald/hald.c
index 8a160d5..a28d22e 100644
--- a/hald/hald.c
+++ b/hald/hald.c
@@ -254,6 +254,35 @@ hald_get_tdl (void)
  	return temporary_device_list;
  }

+void
+hald_compute_udi (gchar *dst, gsize dstsize, const gchar *format, ...)
+{
+	int i;
+	char buf[256];
+	va_list args;
+
+	va_start (args, format);
+	hal_util_compute_udi_valist (hald_get_gdl (), dst, dstsize, format, args);
+	va_end (args);
+
+	if (hal_device_store_find (hald_get_gdl (), dst) == NULL &&
+	    hal_device_store_find (hald_get_tdl (), dst) == NULL)
+		goto out;
+
+	for (i = 0; ; i++) {
+		g_snprintf (buf, sizeof(buf), "%s_%d", dst, i);
+		if (hal_device_store_find (hald_get_gdl (), buf) == NULL &&
+		    hal_device_store_find (hald_get_tdl (), buf) == NULL) {
+			g_strlcpy (dst, buf, dstsize);
+			goto out;
+		}
+	}
+
+out:
+	;
+
+}
+
  /**
   * usage:
   *
diff --git a/hald/hald.h b/hald/hald.h
index 1b60e03..7c55e62 100644
--- a/hald/hald.h
+++ b/hald/hald.h
@@ -47,6 +47,8 @@ extern PolKitContext *pk_context;
  HalDeviceStore *hald_get_gdl (void);
  HalDeviceStore *hald_get_tdl (void);

+void hald_compute_udi (gchar *dst, gsize dstsize, const gchar *format, 
...);
+
  void property_atomic_update_begin ();
  void property_atomic_update_end ();

diff --git a/hald/hald_dbus.c b/hald/hald_dbus.c
index c56fe9e..28195e1 100644
--- a/hald/hald_dbus.c
+++ b/hald/hald_dbus.c
@@ -3854,7 +3854,7 @@ manager_commit_to_gdl (DBusConnection * 
connection, DBusMessage * message, dbus_
  	}

  	/* sanity check & avoid races */
-	hal_util_compute_udi (hald_get_gdl (), udi, sizeof udi, "%s", udi0);
+	hal_util_make_udi_unique (hald_get_gdl (), udi, sizeof udi, udi0);

  	if (hal_device_store_find (hald_get_gdl (), udi)) {
  		/* loose it */
diff --git a/hald/linux/acpi.c b/hald/linux/acpi.c
index af5145c..1c8a3e7 100644
--- a/hald/linux/acpi.c
+++ b/hald/linux/acpi.c
@@ -1006,9 +1006,9 @@ static gboolean
  acpi_generic_compute_udi (HalDevice *d, ACPIDevHandler *handler)
  {
  	gchar udi[256];
-	hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-			      "/org/freedesktop/Hal/devices/acpi_%s",
-			      hal_util_get_last_element (hal_device_property_get_string (d, 
"linux.acpi_path")));
+	hald_compute_udi (udi, sizeof (udi),
+			  "/org/freedesktop/Hal/devices/acpi_%s",
+			  hal_util_get_last_element (hal_device_property_get_string (d, 
"linux.acpi_path")));
  	hal_device_set_udi (d, udi);
  	hal_device_property_set_string (d, "info.udi", udi);
  	return TRUE;
diff --git a/hald/linux/apm.c b/hald/linux/apm.c
index 7b49fb2..06efe46 100644
--- a/hald/linux/apm.c
+++ b/hald/linux/apm.c
@@ -348,16 +348,16 @@ apm_generic_compute_udi (HalDevice *d, 
APMDevHandler *handler)
  	gchar udi[256];

  	if (handler->apm_type == APM_TYPE_BATTERY ) {
-		hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-				      "/org/freedesktop/Hal/devices/apm_battery");
-	
+		hald_compute_udi (udi, sizeof (udi),
+				  "/org/freedesktop/Hal/devices/apm_battery");
+
  	} else if (handler->apm_type == APM_TYPE_AC_ADAPTER ) {
-		hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-				      "/org/freedesktop/Hal/devices/apm_ac_adapter");
+		hald_compute_udi (udi, sizeof (udi),
+				  "/org/freedesktop/Hal/devices/apm_ac_adapter");
  	} else {
-		hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-				      "/org/freedesktop/Hal/devices/apm_%d",
-				      hal_device_property_get_int (d, "info.category"));
+		hald_compute_udi (udi, sizeof (udi),
+				  "/org/freedesktop/Hal/devices/apm_%d",
+				  hal_device_property_get_int (d, "info.category"));
  	}

  	hal_device_set_udi (d, udi);
diff --git a/hald/linux/blockdev.c b/hald/linux/blockdev.c
index decacff..ffdda66 100644
--- a/hald/linux/blockdev.c
+++ b/hald/linux/blockdev.c
@@ -77,23 +77,23 @@ blockdev_compute_udi (HalDevice *d)
  		uuid = hal_device_property_get_string (d, "volume.uuid");

  		if (uuid != NULL && strlen (uuid) > 0) {
-			hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-					      "/org/freedesktop/Hal/devices/volume_uuid_%s", uuid);
+			hald_compute_udi (udi, sizeof (udi),
+					  "/org/freedesktop/Hal/devices/volume_uuid_%s", uuid);
  		} else if (volumelabel != NULL && strlen (volumelabel) > 0) {
-			hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-					      "/org/freedesktop/Hal/devices/volume_label_%s", volumelabel);
+			hald_compute_udi (udi, sizeof (udi),
+					  "/org/freedesktop/Hal/devices/volume_label_%s", volumelabel);
  		} else if (hal_device_property_get_bool(d, "volume.is_disc") &&
  			   hal_device_property_get_bool(d, "volume.disc.is_blank")) {
  			/* this should be a empty CD/DVD */
-			hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
- 
"/org/freedesktop/Hal/devices/volume_empty_%s",
-					      hal_device_property_get_string (d, "volume.disc.type"));
+			hald_compute_udi (udi, sizeof (udi),
+ 
"/org/freedesktop/Hal/devices/volume_empty_%s",
+					  hal_device_property_get_string (d, "volume.disc.type"));
  		} else {
  			/* fallback to partition number, size */
-			hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-					      "/org/freedesktop/Hal/devices/volume_part%d_size_%lld",
-					      hal_device_property_get_int (d, "volume.partition.number"),
-					      hal_device_property_get_uint64 (d, "volume.size"));
+			hald_compute_udi (udi, sizeof (udi),
+					  "/org/freedesktop/Hal/devices/volume_part%d_size_%lld",
+					  hal_device_property_get_int (d, "volume.partition.number"),
+					  hal_device_property_get_uint64 (d, "volume.size"));
  		}
  		g_free(volumelabel);
  	} else {
@@ -108,22 +108,22 @@ blockdev_compute_udi (HalDevice *d)
  		type = hal_device_property_get_string (d, "storage.drive_type");

  		if (serial != NULL) {
-			hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-					      "/org/freedesktop/Hal/devices/storage_serial_%s",
-					      serial);
+			hald_compute_udi (udi, sizeof (udi),
+					  "/org/freedesktop/Hal/devices/storage_serial_%s",
+					  serial);
  		} else if ((model != NULL) && (strlen(model) != 0) ) {
-			hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-					      "/org/freedesktop/Hal/devices/storage_model_%s",
-					      model);
+			hald_compute_udi (udi, sizeof (udi),
+					  "/org/freedesktop/Hal/devices/storage_model_%s",
+					  model);
  		} else if ((bus != NULL) && (type != NULL)){
-			hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-					      "%s_storage_%s_%s",
-					      hal_device_property_get_string (d, 
"storage.originating_device"),
-					      bus, type);
+			hald_compute_udi (udi, sizeof (udi),
+					  "%s_storage_%s_%s",
+					  hal_device_property_get_string (d, "storage.originating_device"),
+					  bus, type);
  		} else {
-			hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-					      "%s_storage",
-					      hal_device_property_get_string (d, 
"storage.originating_device"));
+			hald_compute_udi (udi, sizeof (udi),
+					  "%s_storage",
+					  hal_device_property_get_string (d, "storage.originating_device"));
  		}
  	}

diff --git a/hald/linux/device.c b/hald/linux/device.c
index eda4a3d..d0d7571 100644
--- a/hald/linux/device.c
+++ b/hald/linux/device.c
@@ -390,9 +390,9 @@ input_compute_udi (HalDevice *d)
  {
  	gchar udi[256];

-	hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-			      "%s_logicaldev_input",
-			      hal_device_property_get_string (d, "info.parent"));
+	hald_compute_udi (udi, sizeof (udi),
+			  "%s_logicaldev_input",
+			  hal_device_property_get_string (d, "info.parent"));
  	hal_device_set_udi (d, udi);
  	hal_device_property_set_string (d, "info.udi", udi);

@@ -470,18 +470,18 @@ bluetooth_compute_udi (HalDevice *d)
  	gchar udi[256];

  	if (hal_device_has_capability (d, "bluetooth_acl")) {
-		hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
- 
"/org/freedesktop/Hal/devices/bluetooth_acl_%0llx",
-                                      hal_device_property_get_uint64 
(d, "bluetooth_acl.address"));
+		hald_compute_udi (udi, sizeof (udi),
+ 
"/org/freedesktop/Hal/devices/bluetooth_acl_%0llx",
+                                  hal_device_property_get_uint64 (d, 
"bluetooth_acl.address"));
  	} else if (hal_device_has_capability (d, "bluetooth_sco")) {
-		hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
- 
"/org/freedesktop/Hal/devices/bluetooth_acl_%0llx",
-                                      hal_device_property_get_uint64 
(d, "bluetooth_acl.address"));
+		hald_compute_udi (udi, sizeof (udi),
+ 
"/org/freedesktop/Hal/devices/bluetooth_acl_%0llx",
+                                  hal_device_property_get_uint64 (d, 
"bluetooth_acl.address"));
  	} else {
-		hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-                                      "%s_bluetooth_hci_%0llx",
-                                      hal_device_property_get_string 
(d, "info.parent"),
-                                      hal_device_property_get_uint64 
(d, "bluetooth_hci.address"));
+		hald_compute_udi (udi, sizeof (udi),
+                                  "%s_bluetooth_hci_%0llx",
+                                  hal_device_property_get_string (d, 
"info.parent"),
+                                  hal_device_property_get_uint64 (d, 
"bluetooth_hci.address"));
  	}
  	hal_device_set_udi (d, udi);
  	hal_device_property_set_string (d, "info.udi", udi);
@@ -650,9 +650,9 @@ net_compute_udi (HalDevice *d)
  		/* Need to fall back to something else if mac not available. */
  		id = hal_util_get_last_element(hal_device_property_get_string(d, 
"net.originating_device"));
  	}
-	hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-			      "/org/freedesktop/Hal/devices/net_%s",
-			      id);
+	hald_compute_udi (udi, sizeof (udi),
+			  "/org/freedesktop/Hal/devices/net_%s",
+			  id);
  	hal_device_set_udi (d, udi);
  	hal_device_property_set_string (d, "info.udi", udi);
  	return TRUE;
@@ -687,9 +687,9 @@ scsi_generic_compute_udi (HalDevice *d)
  {
  	gchar udi[256];

-	hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-			      "%s_scsi_generic",
-			      hal_device_property_get_string (d, "info.parent"));
+	hald_compute_udi (udi, sizeof (udi),
+			  "%s_scsi_generic",
+			  hal_device_property_get_string (d, "info.parent"));
  	hal_device_set_udi (d, udi);
  	hal_device_property_set_string (d, "info.udi", udi);
  	return TRUE;
@@ -811,9 +811,9 @@ scsi_host_compute_udi (HalDevice *d)
  {
  	gchar udi[256];

-	hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-			      "%s_scsi_host",
-			      hal_device_property_get_string (d, "info.parent"));
+	hald_compute_udi (udi, sizeof (udi),
+			  "%s_scsi_host",
+			  hal_device_property_get_string (d, "info.parent"));
  	hal_device_set_udi (d, udi);
  	hal_device_property_set_string (d, "info.udi", udi);
  	return TRUE;
@@ -883,19 +883,19 @@ usbclass_compute_udi (HalDevice *d)
  	gchar udi[256];

  	if (hal_device_has_capability (d, "hiddev")) {
-		hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-				      "%s_hiddev",
-				      hal_device_property_get_string (d, "info.parent"));
+		hald_compute_udi (udi, sizeof (udi),
+				  "%s_hiddev",
+				  hal_device_property_get_string (d, "info.parent"));
  		hal_device_set_udi (d, udi);
  		hal_device_property_set_string (d, "info.udi", udi);
  	} else if (hal_device_has_capability (d, "printer")) {
  		const char *serial;

  		serial = hal_device_property_get_string (d, "printer.serial");
-		hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-				      "%s_printer_%s",
-				      hal_device_property_get_string (d, "info.parent"),
-				      serial != NULL ? serial : "noserial");
+		hald_compute_udi (udi, sizeof (udi),
+				  "%s_printer_%s",
+				  hal_device_property_get_string (d, "info.parent"),
+				  serial != NULL ? serial : "noserial");
  		hal_device_set_udi (d, udi);
  		hal_device_property_set_string (d, "info.udi", udi);
  	}
@@ -932,8 +932,8 @@ usbraw_compute_udi (HalDevice *d)
  {
  	gchar udi[256];

-	hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi), "%s_usbraw",
-			      hal_device_property_get_string (d, "info.parent"));
+	hald_compute_udi (udi, sizeof (udi), "%s_usbraw",
+			  hal_device_property_get_string (d, "info.parent"));
  	hal_device_set_udi (d, udi);
  	hal_device_property_set_string (d, "info.udi", udi);

@@ -983,8 +983,8 @@ video4linux_compute_udi (HalDevice *d)
  {
  	gchar udi[256];

-	hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi), 
"%s_video4linux",
-			      hal_device_property_get_string (d, "info.parent"));
+	hald_compute_udi (udi, sizeof (udi), "%s_video4linux",
+			  hal_device_property_get_string (d, "info.parent"));
  	hal_device_set_udi (d, udi);
  	hal_device_property_set_string (d, "info.udi", udi);

@@ -1021,8 +1021,8 @@ dvb_compute_udi (HalDevice *d)
  {
  	gchar udi[256];

-	hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi), "%s_dvb",
-			      hal_device_property_get_string (d, "info.parent"));
+	hald_compute_udi (udi, sizeof (udi), "%s_dvb",
+			  hal_device_property_get_string (d, "info.parent"));
  	hal_device_set_udi (d, udi);
  	hal_device_property_set_string (d, "info.udi", udi);

@@ -1312,41 +1312,41 @@ sound_compute_udi (HalDevice *d)

  	if (hal_device_has_property(d, "sound.card")) {
  		/* don't include card number as it may not be persistent across 
reboots */
-		hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-				      "%s_sound_card_%i",
-				      hal_device_property_get_string (d, "info.parent"),
-				      hal_device_property_get_string (d, "sound.card"));
+		hald_compute_udi (udi, sizeof (udi),
+				  "%s_sound_card_%i",
+				  hal_device_property_get_string (d, "info.parent"),
+				  hal_device_property_get_string (d, "sound.card"));
  	} else if (hal_device_has_property(d, "alsa.card")) {
  		/* don't include card number as it may not be persistent across 
reboots */
-		hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-				      "%s_alsa_%s_%i",
-				      hal_device_property_get_string (d, "info.parent"),
-				      hal_device_property_get_string (d, "alsa.type"),
-				      hal_device_property_get_int (d, "alsa.device"));
+		hald_compute_udi (udi, sizeof (udi),
+				  "%s_alsa_%s_%i",
+				  hal_device_property_get_string (d, "info.parent"),
+				  hal_device_property_get_string (d, "alsa.type"),
+				  hal_device_property_get_int (d, "alsa.device"));
  	} else if (hal_device_has_property(d, "oss.card")) {
  		/* don't include card number as it may not be persistent across 
reboots */
-		hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-				      "%s_oss_%s_%i",
-				      hal_device_property_get_string (d, "info.parent"),
-				      hal_device_property_get_string (d, "oss.type"),
-				      hal_device_property_get_int (d, "oss.device"));
+		hald_compute_udi (udi, sizeof (udi),
+				  "%s_oss_%s_%i",
+				  hal_device_property_get_string (d, "info.parent"),
+				  hal_device_property_get_string (d, "oss.type"),
+				  hal_device_property_get_int (d, "oss.device"));
  	} else if (hal_device_has_property(d, "alsa.type")) {
  		/* handle global ALSA devices */
-		hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-				      "%s_alsa_%s",
-				      hal_device_property_get_string (d, "info.parent"),
-				      hal_device_property_get_string (d, "alsa.type"));
+		hald_compute_udi (udi, sizeof (udi),
+				  "%s_alsa_%s",
+				  hal_device_property_get_string (d, "info.parent"),
+				  hal_device_property_get_string (d, "alsa.type"));
  	} else if (hal_device_has_property(d, "oss.type")) {
  		/* handle global OSS devices */
-		hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-				      "%s_oss_%s",
-				      hal_device_property_get_string (d, "info.parent"),
-				      hal_device_property_get_string (d, "oss.type"));
+		hald_compute_udi (udi, sizeof (udi),
+				  "%s_oss_%s",
+				  hal_device_property_get_string (d, "info.parent"),
+				  hal_device_property_get_string (d, "oss.type"));
  	} else {
  		/* fallback */
-		hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi), 
"%s_sound_unknown",
-				      hal_device_property_get_string (d, "info.parent"));
-	}
+		hald_compute_udi (udi, sizeof (udi), "%s_sound_unknown",
+				  hal_device_property_get_string (d, "info.parent"));
+	}
  	hal_device_set_udi (d, udi);
  	hal_device_property_set_string (d, "info.udi", udi);

@@ -1437,11 +1437,11 @@ serial_compute_udi (HalDevice *d)
  {
  	gchar udi[256];

-	hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-			      "%s_serial_%s_%d",
-			      hal_device_property_get_string (d, "info.parent"),
-			      hal_device_property_get_string (d, "serial.type"),
-			      hal_device_property_get_int (d, "serial.port"));
+	hald_compute_udi (udi, sizeof (udi),
+			  "%s_serial_%s_%d",
+			  hal_device_property_get_string (d, "info.parent"),
+			  hal_device_property_get_string (d, "serial.type"),
+			  hal_device_property_get_int (d, "serial.port"));
  	hal_device_set_udi (d, udi);
  	hal_device_property_set_string (d, "info.udi", udi);

@@ -1489,9 +1489,9 @@ tape_compute_udi (HalDevice *d)
  						(d, "linux.sysfs_path"));
  	if (!sysfs_name)
  		return FALSE;
-	hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-			      "/org/freedesktop/Hal/devices/tape_%s",
-			      sysfs_name);
+	hald_compute_udi (udi, sizeof (udi),
+			  "/org/freedesktop/Hal/devices/tape_%s",
+			  sysfs_name);
  	hal_device_set_udi (d, udi);
  	hal_device_property_set_string (d, "info.udi", udi);

@@ -1536,9 +1536,9 @@ mmc_host_compute_udi (HalDevice *d)
  {
  	gchar udi[256];

-	hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-			      "%s_mmc_host",
-			      hal_device_property_get_string (d, "info.parent"));
+	hald_compute_udi (udi, sizeof (udi),
+			  "%s_mmc_host",
+			  hal_device_property_get_string (d, "info.parent"));
  	hal_device_set_udi (d, udi);
  	hal_device_property_set_string (d, "info.udi", udi);
  	return TRUE;
@@ -1627,10 +1627,10 @@ pci_compute_udi (HalDevice *d)
  {
  	gchar udi[256];

-	hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-			      "/org/freedesktop/Hal/devices/pci_%x_%x",
-			      hal_device_property_get_int (d, "pci.vendor_id"),
-			      hal_device_property_get_int (d, "pci.product_id"));
+	hald_compute_udi (udi, sizeof (udi),
+			  "/org/freedesktop/Hal/devices/pci_%x_%x",
+			  hal_device_property_get_int (d, "pci.vendor_id"),
+			  hal_device_property_get_int (d, "pci.product_id"));
  	hal_device_set_udi (d, udi);
  	hal_device_property_set_string (d, "info.udi", udi);

@@ -1838,20 +1838,20 @@ usb_compute_udi (HalDevice *d)
  	gchar udi[256];

  	if (hal_device_has_property (d, "usb.interface.number")) {
-		hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-				      "%s_if%d",
-				      hal_device_property_get_string (d, "info.parent"),
-				      hal_device_property_get_int (d, "usb.interface.number"));
+		hald_compute_udi (udi, sizeof (udi),
+				  "%s_if%d",
+				  hal_device_property_get_string (d, "info.parent"),
+				  hal_device_property_get_int (d, "usb.interface.number"));
  		hal_device_set_udi (d, udi);
  		hal_device_property_set_string (d, "info.udi", udi);
  	} else {
-		hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-				      "/org/freedesktop/Hal/devices/usb_device_%x_%x_%s",
-				      hal_device_property_get_int (d, "usb_device.vendor_id"),
-				      hal_device_property_get_int (d, "usb_device.product_id"),
-				      hal_device_has_property (d, "usb_device.serial") ?
-				        hal_device_property_get_string (d, "usb_device.serial") :
-				        "noserial");
+		hald_compute_udi (udi, sizeof (udi),
+				  "/org/freedesktop/Hal/devices/usb_device_%x_%x_%s",
+				  hal_device_property_get_int (d, "usb_device.vendor_id"),
+				  hal_device_property_get_int (d, "usb_device.product_id"),
+				  hal_device_has_property (d, "usb_device.serial") ?
+				  hal_device_property_get_string (d, "usb_device.serial") :
+				  "noserial");
  		hal_device_set_udi (d, udi);
  		hal_device_property_set_string (d, "info.udi", udi);
  	}
@@ -1899,11 +1899,11 @@ ide_compute_udi (HalDevice *d)
  {
  	gchar udi[256];

-	hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-			      "%s_ide_%d_%d",
-			      hal_device_property_get_string (d, "info.parent"),
-			      hal_device_property_get_int (d, "ide.host"),
-			      hal_device_property_get_int (d, "ide.channel"));
+	hald_compute_udi (udi, sizeof (udi),
+			  "%s_ide_%d_%d",
+			  hal_device_property_get_string (d, "info.parent"),
+			  hal_device_property_get_int (d, "ide.host"),
+			  hal_device_property_get_int (d, "ide.channel"));
  	hal_device_set_udi (d, udi);
  	hal_device_property_set_string (d, "info.udi", udi);

@@ -1954,9 +1954,9 @@ pnp_compute_udi (HalDevice *d)
  {
  	gchar udi[256];

-	hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-			      "/org/freedesktop/Hal/devices/pnp_%s",
-			      hal_device_property_get_string (d, "pnp.id"));
+	hald_compute_udi (udi, sizeof (udi),
+			  "/org/freedesktop/Hal/devices/pnp_%s",
+			  hal_device_property_get_string (d, "pnp.id"));
  	hal_device_set_udi (d, udi);
  	hal_device_property_set_string (d, "info.udi", udi);

@@ -2006,9 +2006,9 @@ platform_compute_udi (HalDevice *d)
  {
  	gchar udi[256];

-	hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-			      "/org/freedesktop/Hal/devices/platform_%s",
-			      hal_device_property_get_string (d, "platform.id"));
+	hald_compute_udi (udi, sizeof (udi),
+			  "/org/freedesktop/Hal/devices/platform_%s",
+			  hal_device_property_get_string (d, "platform.id"));
  	hal_device_set_udi (d, udi);
  	hal_device_property_set_string (d, "info.udi", udi);

@@ -2066,10 +2066,10 @@ serio_compute_udi (HalDevice *d)
  {
  	gchar udi[256];

-	hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-			      "%s_%s",
-			      hal_device_property_get_string (d, "info.parent"),
-			      hal_device_property_get_string (d, "serio.description"));
+	hald_compute_udi (udi, sizeof (udi),
+			  "%s_%s",
+			  hal_device_property_get_string (d, "info.parent"),
+			  hal_device_property_get_string (d, "serio.description"));
  	hal_device_set_udi (d, udi);
  	hal_device_property_set_string (d, "info.udi", udi);
  	return TRUE;
@@ -2144,10 +2144,10 @@ pcmcia_compute_udi (HalDevice *d)
  {
  	gchar udi[256];

-	hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-			      "/org/freedesktop/Hal/devices/pcmcia_%d_%d",
-			      hal_device_property_get_int (d, "pcmcia.manfid1"),
-			      hal_device_property_get_int (d, "pcmcia.manfid2"));
+	hald_compute_udi (udi, sizeof (udi),
+			  "/org/freedesktop/Hal/devices/pcmcia_%d_%d",
+			  hal_device_property_get_int (d, "pcmcia.manfid1"),
+			  hal_device_property_get_int (d, "pcmcia.manfid2"));
  	hal_device_set_udi (d, udi);
  	hal_device_property_set_string (d, "info.udi", udi);
  	return TRUE;
@@ -2236,10 +2236,10 @@ scsi_compute_udi (HalDevice *d)
  {
  	gchar udi[256];

-	hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-			      "%s_scsi_device_lun%d",
-			      hal_device_property_get_string (d, "info.parent"),
-			      hal_device_property_get_int (d, "scsi.lun"));
+	hald_compute_udi (udi, sizeof (udi),
+			  "%s_scsi_device_lun%d",
+			  hal_device_property_get_string (d, "info.parent"),
+			  hal_device_property_get_int (d, "scsi.lun"));
  	hal_device_set_udi (d, udi);
  	hal_device_property_set_string (d, "info.udi", udi);
  	return TRUE;
@@ -2330,10 +2330,10 @@ mmc_compute_udi (HalDevice *d)
  {
  	gchar udi[256];

-	hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-			      "%s_mmc_card_rca%d",
-			      hal_device_property_get_string (d, "info.parent"),
-			      hal_device_property_get_int (d, "mmc.rca"));
+	hald_compute_udi (udi, sizeof (udi),
+			  "%s_mmc_card_rca%d",
+			  hal_device_property_get_string (d, "info.parent"),
+			  hal_device_property_get_int (d, "mmc.rca"));
  	hal_device_set_udi (d, udi);
  	hal_device_property_set_string (d, "info.udi", udi);
  	return TRUE;
@@ -2387,10 +2387,10 @@ sdio_compute_udi (HalDevice *d)
  {
  	gchar udi[256];

-	hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-			      "%s_sdio%d",
-			      hal_device_property_get_string (d, "info.parent"),
-			      hal_device_property_get_int (d, "sdio.card_id"));
+	hald_compute_udi (udi, sizeof (udi),
+			  "%s_sdio%d",
+			  hal_device_property_get_string (d, "info.parent"),
+			  hal_device_property_get_int (d, "sdio.card_id"));
  	hal_device_set_udi (d, udi);
  	hal_device_property_set_string (d, "info.udi", udi);
  	return TRUE;
@@ -2449,9 +2449,9 @@ xen_compute_udi (HalDevice *d)
  {
  	gchar udi[256];

-	hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-			      "/org/freedesktop/Hal/devices/xen_%s",
-			      hal_device_property_get_string (d, "xen.bus_id"));
+	hald_compute_udi (udi, sizeof (udi),
+			  "/org/freedesktop/Hal/devices/xen_%s",
+			  hal_device_property_get_string (d, "xen.bus_id"));
  	hal_device_set_udi (d, udi);
  	hal_device_property_set_string (d, "info.udi", udi);
  	return TRUE;
@@ -2530,9 +2530,9 @@ ieee1394_compute_udi (HalDevice *d)
  {
  	gchar udi[256];

-	hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-			      "/org/freedesktop/Hal/devices/ieee1394_guid_%0llx",
-			      hal_device_property_get_uint64 (d, "ieee1394.guid"));
+	hald_compute_udi (udi, sizeof (udi),
+			  "/org/freedesktop/Hal/devices/ieee1394_guid_%0llx",
+			  hal_device_property_get_uint64 (d, "ieee1394.guid"));
  	hal_device_set_udi (d, udi);
  	hal_device_property_set_string (d, "info.udi", udi);
  	return TRUE;
@@ -2670,14 +2670,14 @@ firewire_compute_udi (HalDevice *d)
  	gchar udi[256];

  	if (hal_device_has_capability (d, "ieee1394")) {
-		hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-				      "/org/freedesktop/Hal/devices/ieee1394_guid%0llx",
-				      hal_device_property_get_uint64 (d, "ieee1394.guid"));
+		hald_compute_udi (udi, sizeof (udi),
+				  "/org/freedesktop/Hal/devices/ieee1394_guid%0llx",
+				  hal_device_property_get_uint64 (d, "ieee1394.guid"));
  	} else {
-		hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-				      "%s_unit%d",
-				      hal_device_property_get_string (d, 
"ieee1394_unit.originating_device"),
-				      hal_device_property_get_int (d, "ieee1394_unit.unit_index"));
+		hald_compute_udi (udi, sizeof (udi),
+				  "%s_unit%d",
+				  hal_device_property_get_string (d, 
"ieee1394_unit.originating_device"),
+				  hal_device_property_get_int (d, "ieee1394_unit.unit_index"));
  	}

  	hal_device_set_udi (d, udi);
@@ -2831,10 +2831,10 @@ ccw_compute_udi (HalDevice *d)
  {
  	gchar udi[256];

-	hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-			      "/org/freedesktop/Hal/devices/ccw_%s",
-			      hal_device_property_get_string
-			      (d, "ccw.bus_id"));
+	hald_compute_udi (udi, sizeof (udi),
+			  "/org/freedesktop/Hal/devices/ccw_%s",
+			  hal_device_property_get_string
+			  (d, "ccw.bus_id"));
  	hal_device_set_udi (d, udi);
  	hal_device_property_set_string (d, "info.udi", udi);
  	return TRUE;
@@ -2973,10 +2973,10 @@ ccwgroup_compute_udi (HalDevice *d)
  {
  	gchar udi[256];

-	hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-			      "/org/freedesktop/Hal/devices/ccwgroup_%s",
-			      hal_device_property_get_string
-			      (d, "ccwgroup.bus_id"));
+	hald_compute_udi (udi, sizeof (udi),
+			  "/org/freedesktop/Hal/devices/ccwgroup_%s",
+			  hal_device_property_get_string
+			  (d, "ccwgroup.bus_id"));
  	hal_device_set_udi (d, udi);
  	hal_device_property_set_string (d, "info.udi", udi);
  	return TRUE;
@@ -3029,10 +3029,10 @@ iucv_compute_udi (HalDevice *d)
  {
  	gchar udi[256];

-	hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-			      "/org/freedesktop/Hal/devices/iucv_%s",
-			      hal_device_property_get_string
-			      (d, "iucv.bus_id"));
+	hald_compute_udi (udi, sizeof (udi),
+			  "/org/freedesktop/Hal/devices/iucv_%s",
+			  hal_device_property_get_string
+			  (d, "iucv.bus_id"));
  	hal_device_set_udi (d, udi);
  	hal_device_property_set_string (d, "info.udi", udi);
  	return TRUE;
@@ -3071,9 +3071,9 @@ backlight_compute_udi (HalDevice *d)
  	dir = hal_device_property_get_string (d, "linux.sysfs_path");

  	name = hal_util_get_last_element(dir);
-	hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-			      "%s_backlight",
-			      hal_device_property_get_string (d, "info.parent"));
+	hald_compute_udi (udi, sizeof (udi),
+			  "%s_backlight",
+			  hal_device_property_get_string (d, "info.parent"));
  	hal_device_set_udi (d, udi);
  	hal_device_property_set_string (d, "info.udi", udi);
  	return TRUE;
@@ -3455,17 +3455,17 @@ power_supply_compute_udi (HalDevice *d)

  	name = hal_util_get_last_element(dir);
  	if (name)
-		hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-				      "%s_power_supply_%s_%s",
-				      hal_device_property_get_string (d, "info.parent"),
-				      hal_device_property_get_string (d, "info.category"),
-				      name);
+		hald_compute_udi (udi, sizeof (udi),
+				  "%s_power_supply_%s_%s",
+				  hal_device_property_get_string (d, "info.parent"),
+				  hal_device_property_get_string (d, "info.category"),
+				  name);
  	else
-		hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-				      "%s_power_supply_%s",
-				      hal_device_property_get_string (d, "info.parent"),
-				      hal_device_property_get_string (d, "info.category"));
-		
+		hald_compute_udi (udi, sizeof (udi),
+				  "%s_power_supply_%s",
+				  hal_device_property_get_string (d, "info.parent"),
+				  hal_device_property_get_string (d, "info.category"));
+
  	hal_device_set_udi (d, udi);
  	hal_device_property_set_string (d, "info.udi", udi);
  	return TRUE;
@@ -3514,11 +3514,11 @@ drm_compute_udi (HalDevice *d)
  	name = hal_util_get_last_element(dir);

  	/* generate e.g.: 
/org/freedesktop/Hal/devices/pci_8086_2a02_drm_i915_card0 */
-	hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-			      "%s_drm_%s_%s",
-			      hal_device_property_get_string (d, "info.parent"),
-			      hal_device_property_get_string (d, "drm.dri_library"),
-			      name);
+	hald_compute_udi (udi, sizeof (udi),
+			  "%s_drm_%s_%s",
+			  hal_device_property_get_string (d, "info.parent"),
+			  hal_device_property_get_string (d, "drm.dri_library"),
+			  name);

  	hal_device_set_udi (d, udi);
  	hal_device_property_set_string (d, "info.udi", udi);
@@ -3562,9 +3562,9 @@ ps3_system_bus_compute_udi (HalDevice *d)
  {
  	gchar udi[256];

-	hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-			      "/org/freedesktop/Hal/devices/ps3_system_bus_%s",
-			      hal_device_property_get_string (d, "ps3_system_bus.id"));
+	hald_compute_udi (udi, sizeof (udi),
+			  "/org/freedesktop/Hal/devices/ps3_system_bus_%s",
+			  hal_device_property_get_string (d, "ps3_system_bus.id"));
  	hal_device_set_udi (d, udi);
  	hal_device_property_set_string (d, "info.udi", udi);

@@ -3607,9 +3607,9 @@ virtio_compute_udi (HalDevice *d)
  {
  	gchar udi[256];

-	hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-			      "/org/freedesktop/Hal/devices/virtio_%s",
-			      hal_device_property_get_string (d, "virtio.id"));
+	hald_compute_udi (udi, sizeof (udi),
+			  "/org/freedesktop/Hal/devices/virtio_%s",
+			  hal_device_property_get_string (d, "virtio.id"));
  	hal_device_set_udi (d, udi);
  	hal_device_property_set_string (d, "info.udi", udi);

@@ -3663,15 +3663,15 @@ vio_compute_udi (HalDevice *d)
  	type = hal_device_property_get_string (d, "vio.type");

  	if (type) {
-		hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-				      "/org/freedesktop/Hal/devices/vio_%s_%s",
-				      type,
-				      hal_device_property_get_string (d, "vio.id"));
+		hald_compute_udi (udi, sizeof (udi),
+				  "/org/freedesktop/Hal/devices/vio_%s_%s",
+				  type,
+				  hal_device_property_get_string (d, "vio.id"));
  	} else {
-		hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-				      "/org/freedesktop/Hal/devices/vio_%s",
-				      hal_device_property_get_string (d, "vio.id"));
-	}		
+		hald_compute_udi (udi, sizeof (udi),
+				  "/org/freedesktop/Hal/devices/vio_%s",
+				  hal_device_property_get_string (d, "vio.id"));
+	}

  	hal_device_set_udi (d, udi);
  	hal_device_property_set_string (d, "info.udi", udi);
@@ -3713,9 +3713,9 @@ pseudo_compute_udi (HalDevice *d)
  {
  	gchar udi[256];

-	hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-			      "/org/freedesktop/Hal/devices/pseudo",
-			      hal_device_property_get_string (d, "platform.id"));
+	hald_compute_udi (udi, sizeof (udi),
+			  "/org/freedesktop/Hal/devices/pseudo",
+			  hal_device_property_get_string (d, "platform.id"));
  	hal_device_set_udi (d, udi);
  	hal_device_property_set_string (d, "info.udi", udi);

diff --git a/hald/linux/pmu.c b/hald/linux/pmu.c
index c080ed3..67ff785 100644
--- a/hald/linux/pmu.c
+++ b/hald/linux/pmu.c
@@ -212,8 +212,8 @@ static gboolean
  pmu_lid_compute_udi (HalDevice *d, PMUDevHandler *handler)
  {
  	gchar udi[256];
-	hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-			      "/org/freedesktop/Hal/devices/pmu_lid");
+	hald_compute_udi (udi, sizeof (udi),
+			  "/org/freedesktop/Hal/devices/pmu_lid");
  	hal_device_set_udi (d, udi);
  	hal_device_property_set_string (d, "info.udi", udi);
  	return TRUE;
@@ -223,8 +223,8 @@ static gboolean
  pmu_laptop_panel_compute_udi (HalDevice *d, PMUDevHandler *handler)
  {
  	gchar udi[256];
-	hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-			      "/org/freedesktop/Hal/devices/pmu_lcd");
+	hald_compute_udi (udi, sizeof (udi),
+			  "/org/freedesktop/Hal/devices/pmu_lcd");
  	hal_device_set_udi (d, udi);
  	hal_device_property_set_string (d, "info.udi", udi);
  	return TRUE;
@@ -400,10 +400,10 @@ static gboolean
  pmu_generic_compute_udi (HalDevice *d, PMUDevHandler *handler)
  {
  	gchar udi[256];
-	hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-			      "/org/freedesktop/Hal/devices/pmu_%s_%d",
-			      hal_util_get_last_element (hal_device_property_get_string (d, 
"linux.pmu_path")),
-			      hal_device_property_get_int (d, "linux.pmu_type"));
+	hald_compute_udi (udi, sizeof (udi),
+			  "/org/freedesktop/Hal/devices/pmu_%s_%d",
+			  hal_util_get_last_element (hal_device_property_get_string (d, 
"linux.pmu_path")),
+			  hal_device_property_get_int (d, "linux.pmu_type"));
  	hal_device_set_udi (d, udi);
  	hal_device_property_set_string (d, "info.udi", udi);
  	return TRUE;
diff --git a/hald/solaris/devinfo.c b/hald/solaris/devinfo.c
index e82317f..b6a2ddc 100644
--- a/hald/solaris/devinfo.c
+++ b/hald/solaris/devinfo.c
@@ -95,10 +95,10 @@ devinfo_set_default_properties (HalDevice *d, 
HalDevice *parent, di_node_t node,
  		hal_device_property_set_string (d, "info.parent", 
"/org/freedesktop/Hal/devices/local");
  	}

-	hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-				"/org/freedesktop/Hal/devices%s_%d",
-				devfs_path,
-				di_instance (node));
+	hald_compute_udi (udi, sizeof (udi),
+			  "/org/freedesktop/Hal/devices%s_%d",
+			  devfs_path,
+			  di_instance (node));
  	hal_device_set_udi (d, udi);
  	hal_device_property_set_string (d, "info.udi", udi);

diff --git a/hald/solaris/devinfo_storage.c b/hald/solaris/devinfo_storage.c
index 4e1e9b1..61f50aa 100644
--- a/hald/solaris/devinfo_storage.c
+++ b/hald/solaris/devinfo_storage.c
@@ -209,8 +209,9 @@ devinfo_ide_storage_add(HalDevice *grampa, HalDevice 
*parent, di_node_t node, ch
  	devinfo_set_default_properties (d, parent, node, devfs_path);
          hal_device_property_set_string (d, "info.category", "storage");

-        hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-                "%s/%s%d", hal_device_get_udi (parent), driver_name, 
di_instance (node));
+	hald_compute_udi (udi, sizeof (udi),
+			  "%s/%s%d", hal_device_get_udi (parent),
+			  driver_name, di_instance (node));
          hal_device_set_udi (d, udi);
          hal_device_property_set_string (d, "info.udi", udi);
  	PROP_STR(d, node, s, "devid", "info.product");
@@ -255,10 +256,11 @@ devinfo_scsi_add(HalDevice *parent, di_node_t 
node, char *devfs_path, char *devi
  	devinfo_set_default_properties (d, parent, node, devfs_path);
  	hal_device_property_set_string (d, "info.subsystem", "scsi");

-        hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-                "%s/%s%d", hal_device_get_udi (parent), 
di_node_name(node), di_instance (node));
-        hal_device_set_udi (d, udi);
-        hal_device_property_set_string (d, "info.udi", udi);
+	hald_compute_udi (udi, sizeof (udi),
+			  "%s/%s%d", hal_device_get_udi (parent),
+			  di_node_name(node), di_instance (node));
+	hal_device_set_udi (d, udi);
+	hal_device_property_set_string (d, "info.udi", udi);

  	hal_device_property_set_int (d, "scsi.host",
  		hal_device_property_get_int (parent, "scsi_host.host"));
@@ -285,10 +287,11 @@ devinfo_scsi_storage_add(HalDevice *grampa, 
HalDevice *parent, di_node_t node, c
  	devinfo_set_default_properties (d, parent, node, devfs_path);
          hal_device_property_set_string (d, "info.category", "storage");

-        hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-		"%s/sd%d", hal_device_get_udi (parent), di_instance (node));
-        hal_device_set_udi (d, udi);
-        hal_device_property_set_string (d, "info.udi", udi);
+	hald_compute_udi (udi, sizeof (udi),
+			  "%s/sd%d", hal_device_get_udi (parent),
+			  di_instance (node));
+	hal_device_set_udi (d, udi);
+	hal_device_property_set_string (d, "info.udi", udi);
  	PROP_STR(d, node, s, "inquiry-product-id", "info.product");

          hal_device_add_capability (d, "storage");
@@ -542,12 +545,13 @@ devinfo_lofi_add_major(HalDevice *parent, 
di_node_t node, char *devfs_path, char
  		devinfo_set_default_properties (d, parent, node, devfs_path);
  		hal_device_property_set_string (d, "info.subsystem", "pseudo");

-        	hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-                	"%s/%s%d", hal_device_get_udi (parent), 
di_node_name(node), di_instance (node));
-        	hal_device_set_udi (d, udi);
-        	hal_device_property_set_string (d, "info.udi", udi);
+	hald_compute_udi (udi, sizeof (udi),
+			  "%s/%s%d", hal_device_get_udi (parent),
+			  di_node_name(node), di_instance (node));
+		hal_device_set_udi (d, udi);
+		hal_device_property_set_string (d, "info.udi", udi);

-        	devinfo_add_enqueue (d, devfs_path, &devinfo_lofi_handler);
+		devinfo_add_enqueue (d, devfs_path, &devinfo_lofi_handler);
  	} else {
  		d = lofi_d;
  	}
@@ -939,14 +943,14 @@ devinfo_volume_add(HalDevice *parent, di_node_t 
node, devinfo_storage_minor_t *m
  	devinfo_set_default_properties (d, parent, node, devfs_path);
          hal_device_property_set_string (d, "info.category", "volume");

-       	hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-		"%s/%s", hal_device_get_udi (parent), slice);
-        hal_device_set_udi (d, udi);
-        hal_device_property_set_string (d, "info.udi", udi);
-        hal_device_property_set_string (d, "info.product", slice);
+	hald_compute_udi (udi, sizeof (udi),
+			  "%s/%s", hal_device_get_udi (parent), slice);
+	hal_device_set_udi (d, udi);
+	hal_device_property_set_string (d, "info.udi", udi);
+	hal_device_property_set_string (d, "info.product", slice);

-       	hal_device_add_capability (d, "volume");
-       	hal_device_add_capability (d, "block");
+	hal_device_add_capability (d, "volume");
+	hal_device_add_capability (d, "block");
  	hal_device_property_set_int (d, "block.major", major (dev));
  	hal_device_property_set_int (d, "block.minor", minor (dev));
  	hal_device_property_set_string (d, "block.device", devlink);
diff --git a/hald/solaris/devinfo_usb.c b/hald/solaris/devinfo_usb.c
index b0be81d..fd3d37e 100644
--- a/hald/solaris/devinfo_usb.c
+++ b/hald/solaris/devinfo_usb.c
@@ -119,11 +119,11 @@ devinfo_usb_if_add(HalDevice *parent, di_node_t 
node, gchar *devfs_path, int ifn
  	devinfo_set_default_properties (d, parent, node, devfs_path);
          hal_device_property_set_string (d, "info.subsystem", "usb");

-        hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-		"%s_if%d", hal_device_get_udi (parent), ifnum);
-        hal_device_set_udi (d, udi);
-        hal_device_property_set_string (d, "info.udi", udi);
-        hal_device_property_set_string (d, "info.product", "USB Device 
Interface");
+	hald_compute_udi (udi, sizeof (udi),
+			  "%s_if%d", hal_device_get_udi (parent), ifnum);
+	hal_device_set_udi (d, udi);
+	hal_device_property_set_string (d, "info.udi", udi);
+	hal_device_property_set_string (d, "info.product", "USB Device 
Interface");

  	/* copy parent's usb_device.* properties */
  	hal_device_merge_with_rewrite (d, parent, "usb.", "usb_device.");
@@ -209,9 +209,9 @@ devinfo_usb_scsa2usb_add(HalDevice *usbd, di_node_t 
node, gchar *devfs_path)
          hal_device_property_set_string (d, "info.category", "scsi_host");
          hal_device_property_set_int (d, "scsi_host.host", 0);

-        hal_util_compute_udi (hald_get_gdl (), udi, sizeof (udi),
-		"%s/scsi_host%d", hal_device_get_udi (usbd),
-		hal_device_property_get_int (d, "scsi_host.host"));
+	hald_compute_udi (hald_get_gdl (), udi, sizeof (udi),
+			  "%s/scsi_host%d", hal_device_get_udi (usbd),
+			  hal_device_property_get_int (d, "scsi_host.host"));
          hal_device_set_udi (d, udi);
          hal_device_property_set_string (d, "info.udi", udi);
          hal_device_property_set_string (d, "info.product", "SCSI Host 
Adapter");
diff --git a/hald/util.c b/hald/util.c
index 8f2dbec..ee3cb37 100644
--- a/hald/util.c
+++ b/hald/util.c
@@ -469,36 +469,49 @@ hal_util_set_double_from_file (HalDevice *d, const 
gchar *key, const gchar *dire
  }

  void
-hal_util_compute_udi (HalDeviceStore *store, gchar *dst, gsize dstsize, 
const gchar *format, ...)
+hal_util_make_udi_unique (HalDeviceStore *store, gchar *udi, gsize 
udisize, const char *original_udi)
  {
-	guint i;
-	va_list args;
-	gchar buf[256];
-
-	va_start (args, format);
-	g_vsnprintf (buf, sizeof (buf), format, args);
-	va_end (args);
-
-	g_strcanon (buf,
-		    "/_"
-		    "abcdefghijklmnopqrstuvwxyz"
-		    "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
-		    "1234567890", '_');
+	int i;

-	g_strlcpy (dst, buf, dstsize);
-	if (hal_device_store_find (store, dst) == NULL)
+	if (hal_device_store_find (store, original_udi) == NULL) {
+		g_strlcpy (udi, original_udi, udisize);
  		goto out;
+	}

  	for (i = 0; ; i++) {
-		g_snprintf (dst, dstsize, "%s_%d", buf, i);
-		if (hal_device_store_find (store, dst) == NULL)
+		g_snprintf (udi, udisize, "%s_%d", original_udi, i);
+		if (hal_device_store_find (store, udi) == NULL) {
  			goto out;
+		}
  	}

  out:
  	;
  }

+void
+hal_util_compute_udi_valist (HalDeviceStore *store, gchar *dst, gsize 
dstsize, const gchar *format, va_list args)
+{
+	g_vsnprintf (dst, dstsize, format, args);
+
+	g_strcanon (dst,
+		    "/_"
+		    "abcdefghijklmnopqrstuvwxyz"
+		    "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+		    "1234567890", '_');
+}
+
+
+void
+hal_util_compute_udi (HalDeviceStore *store, gchar *dst, gsize dstsize, 
const gchar *format, ...)
+{
+	va_list args;
+
+	va_start (args, format);
+	hal_util_compute_udi_valist (store, dst, dstsize, format, args);
+	va_end (args);
+}
+

  gboolean
  hal_util_path_ascend (gchar *path)
diff --git a/hald/util.h b/hald/util.h
index 7530f03..4cf9524 100644
--- a/hald/util.h
+++ b/hald/util.h
@@ -68,6 +68,10 @@ gboolean hal_util_set_bcd2_from_file (HalDevice *d, 
const gchar *key, const gcha

  gboolean hal_util_set_double_from_file (HalDevice *d, const gchar 
*key, const gchar *directory, const gchar *file);

+void hal_util_make_udi_unique (HalDeviceStore *store, gchar *udi, gsize 
udisize, const char *original_udi);
+
+void hal_util_compute_udi_valist (HalDeviceStore *store, gchar *dst, 
gsize dstsize, const gchar *format, va_list args);
+
  void hal_util_compute_udi (HalDeviceStore *store, gchar *dst, gsize 
dstsize, const gchar *format, ...);

  gboolean hal_util_path_ascend (gchar *path);


More information about the hal mailing list