svn commit: r342994 - stable/12/stand/i386/libi386
Toomas Soome
tsoome at FreeBSD.org
Sun Jan 13 07:22:17 UTC 2019
Author: tsoome
Date: Sun Jan 13 07:22:16 2019
New Revision: 342994
URL: https://svnweb.freebsd.org/changeset/base/342994
Log:
i386_parsedev() needs to support fd devices
After introduction of fd device list to BIOS loader, the i386_parsedev()
needs to recognize fd devices.
Modified:
stable/12/stand/i386/libi386/devicename.c
Directory Properties:
stable/12/ (props changed)
Modified: stable/12/stand/i386/libi386/devicename.c
==============================================================================
--- stable/12/stand/i386/libi386/devicename.c Sun Jan 13 07:19:20 2019 (r342993)
+++ stable/12/stand/i386/libi386/devicename.c Sun Jan 13 07:22:16 2019 (r342994)
@@ -103,23 +103,42 @@ i386_parsedev(struct i386_devdesc **dev, const char *d
}
if (dv == NULL)
return(ENOENT);
- idev = malloc(sizeof(struct i386_devdesc));
- err = 0;
+
np = (devspec + strlen(dv->dv_name));
+ idev = NULL;
+ err = 0;
switch(dv->dv_type) {
- case DEVT_NONE: /* XXX what to do here? Do we care? */
+ case DEVT_NONE:
break;
case DEVT_DISK:
+ idev = malloc(sizeof(struct i386_devdesc));
+ if (idev == NULL)
+ return (ENOMEM);
+
err = disk_parsedev((struct disk_devdesc *)idev, np, path);
if (err != 0)
goto fail;
break;
- case DEVT_CD:
- case DEVT_NET:
+ case DEVT_ZFS:
+ idev = malloc(sizeof (struct zfs_devdesc));
+ if (idev == NULL)
+ return (ENOMEM);
+
+ err = zfs_parsedev((struct zfs_devdesc *)idev, np, path);
+ if (err != 0)
+ goto fail;
+ break;
+
+ default:
+ idev = malloc(sizeof (struct devdesc));
+ if (idev == NULL)
+ return (ENOMEM);
+
unit = 0;
+ cp = (char *)np;
if (*np && (*np != ':')) {
unit = strtol(np, &cp, 0); /* get unit number if present */
@@ -127,9 +146,8 @@ i386_parsedev(struct i386_devdesc **dev, const char *d
err = EUNIT;
goto fail;
}
- } else {
- cp = (char *)np;
}
+
if (*cp && (*cp != ':')) {
err = EINVAL;
goto fail;
@@ -139,21 +157,13 @@ i386_parsedev(struct i386_devdesc **dev, const char *d
if (path != NULL)
*path = (*cp == 0) ? cp : cp + 1;
break;
- case DEVT_ZFS:
- err = zfs_parsedev((struct zfs_devdesc *)idev, np, path);
- if (err != 0)
- goto fail;
- break;
- default:
- err = EINVAL;
- goto fail;
}
idev->dd.d_dev = dv;
- if (dev == NULL) {
- free(idev);
- } else {
+ if (dev != NULL)
*dev = idev;
- }
+ else
+ free(idev);
+
return(0);
fail:
More information about the svn-src-stable
mailing list