[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] hurd: Support device entries with @/dev/disk: qualifier
From: |
Samuel Thibault |
Subject: |
[PATCH] hurd: Support device entries with @/dev/disk: qualifier |
Date: |
Wed, 23 Feb 2022 00:27:59 +0100 |
User-agent: |
NeoMutt/20170609 (1.8.3) |
Those are used with non-bootstrap disk drivers, for which libstore has to
open /dev/disk before calling device_open on it instead of on the device
master port. Normally in that case all /dev/ entries also have the @/dev/disk:
qualifier, so we can just drop it.
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
Index: grub2-2.06/grub-core/osdep/hurd/getroot.c
===================================================================
--- grub2-2.06.orig/grub-core/osdep/hurd/getroot.c
+++ grub2-2.06/grub-core/osdep/hurd/getroot.c
@@ -112,11 +112,23 @@ grub_util_find_hurd_root_device (const c
if (strncmp (name, "device:", sizeof ("device:") - 1) == 0)
{
char *dev_name = name + sizeof ("device:") - 1;
- size_t size = sizeof ("/dev/") - 1 + strlen (dev_name) + 1;
- char *next;
- ret = malloc (size);
- next = stpncpy (ret, "/dev/", size);
- stpncpy (next, dev_name, size - (next - ret));
+
+ if (dev_name[0] == '@')
+ {
+ /* non-bootstrap disk driver, the /dev/ entry is normally set up with
+ the same @. */
+ char *next_name = strchr (dev_name, ':');
+ if (next_name)
+ dev_name = next_name + 1;
+ }
+
+ {
+ size_t size = sizeof ("/dev/") - 1 + strlen (dev_name) + 1;
+ char *next;
+ ret = malloc (size);
+ next = stpncpy (ret, "/dev/", size);
+ stpncpy (next, dev_name, size - (next - ret));
+ }
}
else if (!strncmp (name, "file:", sizeof ("file:") - 1))
ret = strdup (name + sizeof ("file:") - 1);
@@ -166,12 +178,27 @@ grub_util_part_to_disk (const char *os_d
|| strncmp ("/dev/hd", os_dev, 7) == 0)))
{
*is_part = !is_fulldisk (path, os_dev);
+
+ if (path[0] == '@')
+ {
+ /* non-bootstrap disk driver, the /dev/ entry is normally set up with
+ the same @. */
+ char *next_path = strchr (path, ':');
+ if (next_path)
+ {
+ char *n = strdup (next_path + 1);
+ free (path);
+ path = n;
+ }
+ }
+
if (path[0] != '/')
{
char *n = xasprintf ("/dev/%s", path);
free (path);
path = n;
}
+
return path;
}
free (path);
- [PATCH] hurd: Support device entries with @/dev/disk: qualifier,
Samuel Thibault <=