- 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>
This commit is contained in:
parent
9c859f6f6e
commit
0b272aed3b
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=351448
1 changed files with 106 additions and 67 deletions
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue