diff options
author | marcus <marcus@FreeBSD.org> | 2014-04-17 06:24:10 +0800 |
---|---|---|
committer | marcus <marcus@FreeBSD.org> | 2014-04-17 06:24:10 +0800 |
commit | d19b9ff8155fe4018695e644ec64a92b1417a972 (patch) | |
tree | 0f42a31d148371bbc6cac6342e11fd92cf5005fa /sysutils | |
parent | 954ddce1f813292197baae6444f1eb8b78e6892e (diff) | |
download | freebsd-ports-gnome-d19b9ff8155fe4018695e644ec64a92b1417a972.tar.gz freebsd-ports-gnome-d19b9ff8155fe4018695e644ec64a92b1417a972.tar.zst freebsd-ports-gnome-d19b9ff8155fe4018695e644ec64a92b1417a972.zip |
Fix partition detection on newer versions of FreeBSD.
Tested by: Gustau PĂ©rez <gustau.perez@gmail.com>
Diffstat (limited to 'sysutils')
-rw-r--r-- | sysutils/hal/Makefile | 2 | ||||
-rw-r--r-- | sysutils/hal/files/patch-hald_hf-storage.c | 173 |
2 files changed, 68 insertions, 107 deletions
diff --git a/sysutils/hal/Makefile b/sysutils/hal/Makefile index cd818377139c..a8848ada7d85 100644 --- a/sysutils/hal/Makefile +++ b/sysutils/hal/Makefile @@ -4,7 +4,7 @@ PORTNAME= hal DISTVERSION= 0.5.14 -PORTREVISION= 23 +PORTREVISION= 24 CATEGORIES= sysutils MASTER_SITES= http://hal.freedesktop.org/releases/ diff --git a/sysutils/hal/files/patch-hald_hf-storage.c b/sysutils/hal/files/patch-hald_hf-storage.c index c16ea629af42..4c06d041e0fb 100644 --- a/sysutils/hal/files/patch-hald_hf-storage.c +++ b/sysutils/hal/files/patch-hald_hf-storage.c @@ -1,106 +1,67 @@ ---- ./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; - } +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; + |