summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiod Vallat <miod@cvs.openbsd.org>2009-10-26 20:04:07 +0000
committerMiod Vallat <miod@cvs.openbsd.org>2009-10-26 20:04:07 +0000
commit91ba593b93190e28142120152050a9c19e969bf4 (patch)
tree3fbb6d374bf78244c5a79cddb72488ad6e443455
parentacd437f4e835c5192c40ae9a443c11eff9b97627 (diff)
In device_match(), match on exact device name (as obtained from struct cfdriver)
instead of `first N chars of dv_xname and checking the next char is a digit'.
-rw-r--r--sys/arch/hp300/hp300/autoconf.c57
1 files changed, 23 insertions, 34 deletions
diff --git a/sys/arch/hp300/hp300/autoconf.c b/sys/arch/hp300/hp300/autoconf.c
index 19f9bd4680c..c71f5920aa5 100644
--- a/sys/arch/hp300/hp300/autoconf.c
+++ b/sys/arch/hp300/hp300/autoconf.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: autoconf.c,v 1.46 2009/03/15 20:40:23 miod Exp $ */
+/* $OpenBSD: autoconf.c,v 1.47 2009/10/26 20:04:06 miod Exp $ */
/* $NetBSD: autoconf.c,v 1.45 1999/04/10 17:31:02 kleink Exp $ */
/*
@@ -167,7 +167,7 @@ void setbootdev(void);
static struct dev_data *dev_data_lookup(struct device *);
static void dev_data_insert(struct dev_data *, ddlist_t *);
-static int device_match(const char *, const char *);
+static int device_match(struct device *, const char *);
int mainbusmatch(struct device *, void *, void *);
void mainbusattach(struct device *, struct device *, void *);
@@ -300,20 +300,9 @@ diskconf(void)
**********************************************************************/
static int
-device_match(const char *dvname, const char *template)
+device_match(struct device *dv, const char *template)
{
- size_t len = strlen(template);
- char unit;
-
- if (strncmp(dvname, template, len) != 0)
- return (1);
-
- /* Check that we are immediately followed by an unit number. */
- unit = dvname[len];
- if (unit < '0' || unit > '9')
- return (1);
-
- return (0);
+ return strcmp(dv->dv_cfdata->cf_driver->cd_name, template);
}
/*
@@ -356,16 +345,16 @@ device_register(dev, aux)
goto linkup;
}
- if (device_match(dev->dv_xname, "fhpib") == 0 ||
- device_match(dev->dv_xname, "nhpib") == 0 ||
- device_match(dev->dv_xname, "spc") == 0) {
+ if (device_match(dev, "fhpib") == 0 ||
+ device_match(dev, "nhpib") == 0 ||
+ device_match(dev, "spc") == 0) {
struct dio_attach_args *da = aux;
dd->dd_scode = da->da_scode;
goto linkup;
}
- if (device_match(dev->dv_xname, "hd") == 0) {
+ if (device_match(dev, "hd") == 0) {
struct hpibbus_attach_args *ha = aux;
dd->dd_slave = ha->ha_slave;
@@ -373,9 +362,9 @@ device_register(dev, aux)
goto linkup;
}
- if (device_match(dev->dv_xname, "cd") == 0 ||
- device_match(dev->dv_xname, "sd") == 0 ||
- device_match(dev->dv_xname, "st") == 0) {
+ if (device_match(dev, "cd") == 0 ||
+ device_match(dev, "sd") == 0 ||
+ device_match(dev, "st") == 0) {
struct scsi_attach_args *sa = aux;
dd->dd_slave = sa->sa_sc_link->target;
@@ -392,13 +381,13 @@ device_register(dev, aux)
linkup:
LIST_INSERT_HEAD(&dev_data_list, dd, dd_list);
- if (device_match(dev->dv_xname, "fhpib") == 0 ||
- device_match(dev->dv_xname, "nhpib") == 0) {
+ if (device_match(dev, "fhpib") == 0 ||
+ device_match(dev, "nhpib") == 0) {
dev_data_insert(dd, &dev_data_list_hpib);
return;
}
- if (device_match(dev->dv_xname, "spc") == 0) {
+ if (device_match(dev, "spc") == 0) {
dev_data_insert(dd, &dev_data_list_scsi);
return;
}
@@ -461,9 +450,9 @@ findbootdev()
* Sanity check.
*/
if ((type == 0 &&
- device_match(bootdv->dv_xname, "ct")) ||
+ device_match(bootdv, "ct")) ||
(type == 2 &&
- device_match(bootdv->dv_xname, "hd"))) {
+ device_match(bootdv, "hd"))) {
printf("WARNING: boot device/type mismatch!\n");
printf("device = %s, type = %d\n",
bootdv->dv_xname, type);
@@ -486,9 +475,9 @@ findbootdev()
/*
* Sanity check.
*/
- if (device_match(bootdv->dv_xname, "cd") != 0 &&
- device_match(bootdv->dv_xname, "sd") != 0 &&
- device_match(bootdv->dv_xname, "st") != 0) {
+ if (device_match(bootdv, "cd") != 0 &&
+ device_match(bootdv, "sd") != 0 &&
+ device_match(bootdv, "st") != 0) {
printf("WARNING: boot device/type mismatch!\n");
printf("device = %s, type = %d\n",
bootdv->dv_xname, type);
@@ -590,11 +579,11 @@ setbootdev()
/*
* Determine device type.
*/
- if (device_match(root_device->dv_xname, "hd") == 0)
+ if (device_match(root_device, "hd") == 0)
type = 2;
- else if (device_match(root_device->dv_xname, "cd") == 0 ||
- device_match(root_device->dv_xname, "sd") == 0 ||
- device_match(root_device->dv_xname, "st") == 0)
+ else if (device_match(root_device, "cd") == 0 ||
+ device_match(root_device, "sd") == 0 ||
+ device_match(root_device, "st") == 0)
/* force scsi disk regardless of the actual device */
type = 4;
else {