svn commit: r342707 - head/stand/i386/libi386
Toomas Soome
tsoome at FreeBSD.org
Wed Jan 2 20:31:16 UTC 2019
Author: tsoome
Date: Wed Jan 2 20:31:15 2019
New Revision: 342707
URL: https://svnweb.freebsd.org/changeset/base/342707
Log:
i386_parsedev() needs to support fd devices
MFC after: 2 weeks
Modified:
head/stand/i386/libi386/devicename.c
Modified: head/stand/i386/libi386/devicename.c
==============================================================================
--- head/stand/i386/libi386/devicename.c Wed Jan 2 19:48:17 2019 (r342706)
+++ head/stand/i386/libi386/devicename.c Wed Jan 2 20:31:15 2019 (r342707)
@@ -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-all
mailing list