Author: imp
Date: Thu May 31 02:54:11 2018
New Revision: 334412
URL: https://svnweb.freebsd.org/changeset/base/334412

Log:
  Pass a struct devdesc to the format commands. Use proper type rather
  than doing weird type-punning that happened to work because the size
  was right. We copied a zfs devdesc into a disk_devdesc and then after
  passing through a NULL pointer reinterpreted it as a
  zfs_devdesc. Instead, pass the base devdesc around and 'upcase' when
  we know the types are right.
  
  This has the happy side effect of fixing a gcc warning about bad
  type punning.
  
  Differential Revision: https://reviews.freebsd.org/D15629

Modified:
  head/stand/userboot/userboot/devicename.c
  head/stand/userboot/userboot/main.c

Modified: head/stand/userboot/userboot/devicename.c
==============================================================================
--- head/stand/userboot/userboot/devicename.c   Thu May 31 02:25:46 2018        
(r334411)
+++ head/stand/userboot/userboot/devicename.c   Thu May 31 02:54:11 2018        
(r334412)
@@ -175,30 +175,30 @@ userboot_parsedev(struct disk_devdesc **dev, const cha
 char *
 userboot_fmtdev(void *vdev)
 {
-    struct disk_devdesc        *dev = (struct disk_devdesc *)vdev;
+    struct devdesc     *dev = (struct devdesc *)vdev;
     static char                buf[128];       /* XXX device length constant? 
*/
 
-    switch(dev->dd.d_dev->dv_type) {
+    switch(dev->d_dev->dv_type) {
     case DEVT_NONE:
        strcpy(buf, "(no device)");
        break;
 
     case DEVT_CD:
-       sprintf(buf, "%s%d:", dev->dd.d_dev->dv_name, dev->dd.d_unit);
+       sprintf(buf, "%s%d:", dev->d_dev->dv_name, dev->d_unit);
        break;
 
     case DEVT_DISK:
        return (disk_fmtdev(vdev));
 
     case DEVT_NET:
-       sprintf(buf, "%s%d:", dev->dd.d_dev->dv_name, dev->dd.d_unit);
+       sprintf(buf, "%s%d:", dev->d_dev->dv_name, dev->d_unit);
        break;
 
     case DEVT_ZFS:
 #if defined(USERBOOT_ZFS_SUPPORT)
        return (zfs_fmtdev(vdev));
 #else
-       sprintf(buf, "%s%d:", dev->dd.d_dev->dv_name, dev->dd.d_unit);
+       sprintf(buf, "%s%d:", dev->d_dev->dv_name, dev->d_unit);
 #endif
        break;
     }

Modified: head/stand/userboot/userboot/main.c
==============================================================================
--- head/stand/userboot/userboot/main.c Thu May 31 02:25:46 2018        
(r334411)
+++ head/stand/userboot/userboot/main.c Thu May 31 02:54:11 2018        
(r334412)
@@ -155,20 +155,19 @@ static void
 extract_currdev(void)
 {
        struct disk_devdesc dev;
-
-       //bzero(&dev, sizeof(dev));
-
+       struct devdesc *dd;
 #if defined(USERBOOT_ZFS_SUPPORT)
+       struct zfs_devdesc zdev;
+
        CTASSERT(sizeof(struct disk_devdesc) >= sizeof(struct zfs_devdesc));
        if (userboot_zfs_found) {
-               struct zfs_devdesc zdev;
        
                /* Leave the pool/root guid's unassigned */
                bzero(&zdev, sizeof(zdev));
                zdev.dd.d_dev = &zfs_dev;
                
-               dev = *(struct disk_devdesc *)&zdev;
-               init_zfs_bootenv(zfs_fmtdev(&dev));
+               init_zfs_bootenv(zfs_fmtdev(&zdev));
+               dd = &zdev.dd;
        } else
 #endif
 
@@ -185,14 +184,16 @@ extract_currdev(void)
                        dev.d_slice = -1;
                        dev.d_partition = -1;
                }
+               dd = &dev.dd;
        } else {
                dev.dd.d_dev = &host_dev;
                dev.dd.d_unit = 0;
+               dd = &dev.dd;
        }
 
-       env_setenv("currdev", EV_VOLATILE, userboot_fmtdev(&dev),
+       env_setenv("currdev", EV_VOLATILE, userboot_fmtdev(dd),
            userboot_setcurrdev, env_nounset);
-       env_setenv("loaddev", EV_VOLATILE, userboot_fmtdev(&dev),
+       env_setenv("loaddev", EV_VOLATILE, userboot_fmtdev(dd),
            env_noset, env_nounset);
 }
 
_______________________________________________
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