aboutsummaryrefslogtreecommitdiff
path: root/sysutils/hal
diff options
context:
space:
mode:
authorJoe Marcus Clarke <marcus@FreeBSD.org>2014-04-16 22:24:10 +0000
committerJoe Marcus Clarke <marcus@FreeBSD.org>2014-04-16 22:24:10 +0000
commitd449f1102fb1956c2c50da73ee993891b7889af0 (patch)
tree0f42a31d148371bbc6cac6342e11fd92cf5005fa /sysutils/hal
parent60c86fe0f78508074f9fd8f61a27cd3eaa5a1b88 (diff)
downloadports-d449f1102fb1956c2c50da73ee993891b7889af0.tar.gz
ports-d449f1102fb1956c2c50da73ee993891b7889af0.zip
Fix partition detection on newer versions of FreeBSD.
Tested by: Gustau PĂ©rez <gustau.perez@gmail.com>
Notes
Notes: svn path=/head/; revision=351423
Diffstat (limited to 'sysutils/hal')
-rw-r--r--sysutils/hal/Makefile2
-rw-r--r--sysutils/hal/files/patch-hald_hf-storage.c173
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;
+