On Wed, May 30, 2018 at 8:54 PM, Warner Losh <i...@freebsd.org> wrote:
> 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 This should have been https://reviews.freebsd.org/D15628. Closed manually. Warner > > 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"