diff options
author | bdrewery <bdrewery@FreeBSD.org> | 2014-04-17 13:28:35 +0800 |
---|---|---|
committer | bdrewery <bdrewery@FreeBSD.org> | 2014-04-17 13:28:35 +0800 |
commit | 3c277bf9c4070cb5b6f415b379c3409fe6d08d59 (patch) | |
tree | d5bd87c18e0c072e9c0e6a11120fcbc2baf8759a /sysutils/hal | |
parent | 9dcb907144104328057b76659e92d1fee8d80fbc (diff) | |
download | freebsd-ports-gnome-3c277bf9c4070cb5b6f415b379c3409fe6d08d59.tar.gz freebsd-ports-gnome-3c277bf9c4070cb5b6f415b379c3409fe6d08d59.tar.zst freebsd-ports-gnome-3c277bf9c4070cb5b6f415b379c3409fe6d08d59.zip |
- Fix patch files/patch-hald_hf-storage.c
Revert r351423 and apply it as a patch to the patch.
Reported by: O. Hartmann <ohartman@zedat.fu-berlin.de>
Diffstat (limited to 'sysutils/hal')
-rw-r--r-- | sysutils/hal/files/patch-hald_hf-storage.c | 173 |
1 files changed, 106 insertions, 67 deletions
diff --git a/sysutils/hal/files/patch-hald_hf-storage.c b/sysutils/hal/files/patch-hald_hf-storage.c index 4c06d041e0fb..c16ea629af42 100644 --- a/sysutils/hal/files/patch-hald_hf-storage.c +++ b/sysutils/hal/files/patch-hald_hf-storage.c @@ -1,67 +1,106 @@ -Index: patch-hald_hf-storage.c -=================================================================== ---- patch-hald_hf-storage.c (revision 351262) -+++ patch-hald_hf-storage.c (working copy) -@@ -1,5 +1,5 @@ ----- ./hald/freebsd/hf-storage.c.orig 2009-08-24 14:42:29.000000000 +0200 --+++ ./hald/freebsd/hf-storage.c 2013-06-10 16:22:36.080280935 +0200 -+--- hald/freebsd/hf-storage.c.orig 2009-08-24 12:42:29.000000000 +0000 -++++ hald/freebsd/hf-storage.c 2014-04-16 19:04:08.004114131 +0000 - @@ -30,6 +30,7 @@ - #include <limits.h> - #include <inttypes.h> -@@ -8,7 +8,7 @@ - #include <sys/param.h> - #include <sys/types.h> - #include <sys/disklabel.h> --@@ -174,6 +175,10 @@ hf_storage_device_probe_geom (HalDevice -+@@ -174,6 +175,10 @@ - if (! geom_obj) - return; - -@@ -19,7 +19,7 @@ - node = g_node_find(hf_storage_geom_tree, G_PRE_ORDER, G_TRAVERSE_ALL, - GUINT_TO_POINTER(geom_obj->hash)); - --@@ -418,10 +423,41 @@ hf_storage_parse_conftxt (const char *co -+@@ -418,10 +423,42 @@ - continue; - } - -@@ -32,7 +32,8 @@ - + ! strcmp(fields[1], "BSD") || - + ! strcmp(fields[1], "PART")) && - + (! strncmp(fields[2], "ufsid/", strlen("ufsid/")) || --+ ! strncmp(fields[2], "ufs/", strlen("ufs/")))) -++ ! strncmp(fields[2], "ufs/", strlen("ufs/")) || -++ ! strncmp(fields[2], "diskid/", strlen("diskid/")))) - + { - + g_strfreev(fields); - + continue; -@@ -61,7 +62,7 @@ - geom_obj->type = -1; /* We use -1 here to denote a missing type. */ - geom_obj->hash = hash; - --@@ -458,6 +494,13 @@ hf_storage_parse_conftxt (const char *co -+@@ -458,6 +495,13 @@ - { - g_free(geom_obj->class); - geom_obj->class = g_strdup(fields[12]); -@@ -75,7 +76,7 @@ - } - } - } --@@ -589,11 +632,18 @@ hf_storage_devd_notify (const char *syst -+@@ -589,11 +633,18 @@ - char *conftxt; - GSList *new_disks; - -@@ -95,7 +96,7 @@ - new_disks = hf_storage_parse_conftxt(conftxt); - g_free(conftxt); - --@@ -669,7 +719,7 @@ hf_storage_conftxt_timeout_cb (gpointer -+@@ -669,7 +720,7 @@ - if (hf_is_waiting) - return TRUE; - +--- ./hald/freebsd/hf-storage.c.orig 2009-08-24 14:42:29.000000000 +0200 ++++ ./hald/freebsd/hf-storage.c 2013-06-10 16:22:36.080280935 +0200 +@@ -30,6 +30,7 @@ + #include <limits.h> + #include <inttypes.h> + #include <string.h> ++#include <unistd.h> + #include <sys/param.h> + #include <sys/types.h> + #include <sys/disklabel.h> +@@ -174,6 +175,10 @@ hf_storage_device_probe_geom (HalDevice + if (! geom_obj) + return; + ++ /* Exclude /dev/diskid/ labels as they are duplicates. */ ++ if (strncmp(geom_obj->dev, "diskid/", 7) == 0) ++ return; ++ + node = g_node_find(hf_storage_geom_tree, G_PRE_ORDER, G_TRAVERSE_ALL, + GUINT_TO_POINTER(geom_obj->hash)); + +@@ -418,10 +423,41 @@ hf_storage_parse_conftxt (const char *co + continue; + } + ++ /* XXX This is a hack, but we need to ignore dynamic labels like ++ * ufsids which are created and destroyed based on whether or not ++ * the actual device is mounted or not. If we don't then strange ++ * things happen in applications like nautilus. ++ */ ++ if ((! strcmp(fields[1], "LABEL") || ++ ! strcmp(fields[1], "BSD") || ++ ! strcmp(fields[1], "PART")) && ++ (! strncmp(fields[2], "ufsid/", strlen("ufsid/")) || ++ ! strncmp(fields[2], "ufs/", strlen("ufs/")))) ++ { ++ g_strfreev(fields); ++ continue; ++ } ++ + geom_obj = g_new0(Geom_Object, 1); + + geom_obj->class = g_strdup(fields[1]); + geom_obj->dev = g_strdup(fields[2]); ++ /* Allow for spaces in label names. */ ++ if (! strcmp(fields[1], "LABEL")) ++ { ++ int j; ++ ++ for (j = 3; g_strv_length(fields) > (j + 2) && ++ strcmp(fields[j + 2], "i"); j++) ++ { ++ char *tmp; ++ ++ tmp = g_strdup_printf("%s %s", geom_obj->dev, fields[j]); ++ g_free(geom_obj->dev); ++ geom_obj->dev = tmp; ++ } ++ } ++ + geom_obj->type = -1; /* We use -1 here to denote a missing type. */ + geom_obj->hash = hash; + +@@ -458,6 +494,13 @@ hf_storage_parse_conftxt (const char *co + { + g_free(geom_obj->class); + geom_obj->class = g_strdup(fields[12]); ++ if (! strcmp(geom_obj->class, "BSD") && ++ geom_obj->type == FS_UNUSED) ++ { ++ geom_obj->type = FS_BSDFFS; ++ g_free(geom_obj->str_type); ++ geom_obj->str_type = g_strdup("freebsd-ufs"); ++ } + } + } + } +@@ -589,11 +632,18 @@ hf_storage_devd_notify (const char *syst + char *conftxt; + GSList *new_disks; + +- if (strcmp(system, "DEVFS") || strcmp(subsystem, "CDEV") || ++ if (! data || strcmp(system, "DEVFS") || strcmp(subsystem, "CDEV") || ++ ! strncmp(data, "cdev=ufs/", strlen("cdev=ufs/")) || ++ ! strncmp(data, "cdev=ufsid/", strlen("cdev=ufsid/")) || + (strcmp(type, "CREATE") && strcmp(type, "DESTROY"))) + return FALSE; + ++ if (! strcmp(type, "DESTROY")) ++ g_usleep(G_USEC_PER_SEC/2); ++ + conftxt = hf_get_string_sysctl(NULL, "kern.geom.conftxt"); ++ if (! conftxt) ++ return FALSE; + new_disks = hf_storage_parse_conftxt(conftxt); + g_free(conftxt); + +@@ -669,7 +719,7 @@ hf_storage_conftxt_timeout_cb (gpointer + if (hf_is_waiting) + return TRUE; + +- hf_storage_devd_notify("DEVFS", "CDEV", "CREATE", NULL); ++ hf_storage_devd_notify("DEVFS", "CDEV", "CREATE", ""); + + return TRUE; + } |