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:
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to