aboutsummaryrefslogtreecommitdiff
path: root/sysutils/hal/files/patch-hald_freebsd_hf-volume.c
diff options
context:
space:
mode:
Diffstat (limited to 'sysutils/hal/files/patch-hald_freebsd_hf-volume.c')
-rw-r--r--sysutils/hal/files/patch-hald_freebsd_hf-volume.c113
1 files changed, 12 insertions, 101 deletions
diff --git a/sysutils/hal/files/patch-hald_freebsd_hf-volume.c b/sysutils/hal/files/patch-hald_freebsd_hf-volume.c
index 6ee93b139a6b..4fb0d95b4e85 100644
--- a/sysutils/hal/files/patch-hald_freebsd_hf-volume.c
+++ b/sysutils/hal/files/patch-hald_freebsd_hf-volume.c
@@ -1,105 +1,16 @@
---- hald/freebsd/hf-volume.c.orig 2008-08-10 09:50:10.000000000 -0400
-+++ hald/freebsd/hf-volume.c 2009-09-19 02:06:37.000000000 -0400
-@@ -45,6 +45,7 @@
- #include "hf-util.h"
-
- #define PROBE_VOLUME_TIMEOUT (HAL_HELPER_TIMEOUT * 6)
-+#define HF_VOLUME_FUSE_DB "/tmp/.fuse-mnts"
-
- static void
- hf_volume_get_mounts (struct statfs **mounts, int *n_mounts)
-@@ -60,6 +61,58 @@ hf_volume_get_mounts (struct statfs **mo
- }
- }
-
-+static char *
-+hf_volume_resolve_fuse (const char *special)
-+{
-+ gchar *contents;
-+ gchar **lines;
-+ gsize len;
-+ int i;
-+
-+ g_return_val_if_fail(special != NULL, NULL);
-+
-+ if (! g_file_get_contents(HF_VOLUME_FUSE_DB, &contents, &len, NULL))
-+ return g_strdup(special);
-+
-+ lines = g_strsplit(contents, "\n", 0);
-+ g_free(contents);
-+
-+ for (i = 0; lines && lines[i]; i++)
-+ {
-+ gchar **fields;
-+
-+ fields = g_strsplit(lines[i], "=", 2);
-+ if (fields && g_strv_length(fields) == 2)
-+ {
-+ if (strcmp(fields[0], special) == 0)
-+ {
+--- hald/freebsd/hf-volume.c.orig 2009-12-23 14:01:00.000000000 -0500
++++ hald/freebsd/hf-volume.c 2009-12-23 14:01:25.000000000 -0500
+@@ -86,9 +86,12 @@ hf_volume_resolve_fuse (const char *spec
+ {
+ if (strcmp(fields[0], special) == 0)
+ {
+ char *ret;
+
+ ret = g_strdup(fields[1]);
-+ g_strfreev(fields);
-+ g_strfreev(lines);
+ g_strfreev(fields);
+ g_strfreev(lines);
+- return g_strdup(fields[1]);
+ return ret;
-+ }
-+ }
-+ g_strfreev(fields);
-+ }
-+
-+ g_strfreev(lines);
-+
-+ return g_strdup(special);
-+}
-+
-+static char *
-+hf_volume_resolve_special (const char *special)
-+{
-+ g_return_val_if_fail(special != NULL, NULL);
-+
-+ if (strstr(special, "fuse"))
-+ return hf_volume_resolve_fuse(special);
-+
-+ return g_strdup(special);
-+}
-+
- static const struct statfs *
- hf_volume_mounts_find (const struct statfs *mounts,
- int n_mounts,
-@@ -71,8 +124,18 @@ hf_volume_mounts_find (const struct stat
- g_return_val_if_fail(special != NULL, NULL);
-
- for (i = 0; i < n_mounts; i++)
-- if (! strcmp(mounts[i].f_mntfromname, special))
-- return &mounts[i];
-+ {
-+ char *resolved;
-+
-+ resolved = hf_volume_resolve_special(mounts[i].f_mntfromname);
-+ if (! strcmp(resolved, special))
-+ {
-+ g_free(resolved);
-+ return &mounts[i];
-+ }
-+
-+ g_free(resolved);
-+ }
-
- return NULL;
- }
-@@ -92,7 +155,13 @@ hf_volume_device_update_mount_properties
-
- special = hal_device_property_get_string(device, "block.device");
- if (special)
-- mount = hf_volume_mounts_find(mounts, n_mounts, special);
-+ {
-+ mount = hf_volume_mounts_find(mounts, n_mounts, special);
-+ if (mount && strcmp(special, mount->f_mntfromname))
-+ hal_device_property_set_string(device, "volume.freebsd.real_mounted_device", mount->f_mntfromname);
-+ else
-+ hal_device_property_remove(device, "volume.freebsd.real_mounted_device");
-+ }
- }
-
- hal_device_property_set_bool(device, "volume.is_mounted", mount != NULL);
+ }
+ }
+ g_strfreev(fields);