summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormiod <miod@openbsd.org>2013-10-09 20:11:41 +0000
committermiod <miod@openbsd.org>2013-10-09 20:11:41 +0000
commit9c951bc8893ebb826489b323459c56a97babb21e (patch)
treef92a4d1ee263a2d179007a4d3b28833e6133f25f
parentFix build (forgot to rerun make depend) (diff)
downloadwireguard-openbsd-9c951bc8893ebb826489b323459c56a97babb21e.tar.xz
wireguard-openbsd-9c951bc8893ebb826489b323459c56a97babb21e.zip
Parse (hex) partition number in boot path. For experts only.
-rw-r--r--sys/arch/aviion/stand/boot/devopen.c25
1 files changed, 21 insertions, 4 deletions
diff --git a/sys/arch/aviion/stand/boot/devopen.c b/sys/arch/aviion/stand/boot/devopen.c
index 35a3307793b..c4752d35dab 100644
--- a/sys/arch/aviion/stand/boot/devopen.c
+++ b/sys/arch/aviion/stand/boot/devopen.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: devopen.c,v 1.1 2013/10/08 21:55:21 miod Exp $ */
+/* $OpenBSD: devopen.c,v 1.2 2013/10/09 20:11:41 miod Exp $ */
/*
* Copyright (c) 2013 Miodrag Vallat.
@@ -41,9 +41,16 @@ devopen(struct open_file *f, const char *fname, char **file)
/*
* Attempt to parse the name as
- * ctrlnam([num[,unit[,lun]]])[:partname/]filename
+ * ctrlnam([num[,unit[,lun]]])[partname:]filename
* or
- * devnam(ctrlnam([addr|num])[,unit[,lun]])[:partname/]filename
+ * devnam(addr|num|ctrlnam([addr|num][,initiator])[,unit[,lun]])
+ * [partname:]filename
+ *
+ * With device names being "sd" or "st" for storage devices,
+ * or a controller name for network devices, and controller names
+ * being four letter long ("dgen", "dgsc", "inen", "ncsc" ...)
+ *
+ * Initiator id is always ignored.
*/
po = strchr(fname, '(');
@@ -111,7 +118,17 @@ devopen(struct open_file *f, const char *fname, char **file)
/* no controller, keep defaults */
}
- while (*fname == '/')
+ /* XXX parse partition: */
+ p = strchr(fname, ':');
+ if (p != NULL) {
+ if (*fname > '9')
+ part = strtol(fname, NULL, 16);
+ else
+ part = strtol(fname, NULL, 0);
+ fname = p + 1;
+ }
+
+ while (*fname == '/' || *fname == ':')
fname++;
*file = (char *)fname;