Diff reads good. ok? Some thoughts (mostly for myself) inline.
Martin Natano wrote: > Below the uiomove conversion for isofs/cd9660/cd9660_vnops.c. > > cheers, > natano > > Index: isofs/cd9660/cd9660_vnops.c > =================================================================== > RCS file: /cvs/src/sys/isofs/cd9660/cd9660_vnops.c,v > retrieving revision 1.73 > diff -u -p -r1.73 cd9660_vnops.c > --- isofs/cd9660/cd9660_vnops.c 11 Dec 2015 11:25:55 -0000 1.73 > +++ isofs/cd9660/cd9660_vnops.c 1 Jan 2016 17:45:50 -0000 > @@ -227,7 +227,8 @@ cd9660_read(void *v) > daddr_t lbn, rablock; > off_t diff; > int error = 0; > - long size, n, on; > + long size, on; > + size_t n; > > if (uio->uio_resid == 0) > return (0); > @@ -240,8 +241,7 @@ cd9660_read(void *v) > > lbn = lblkno(imp, uio->uio_offset); > on = blkoff(imp, uio->uio_offset); > - n = min((u_int)(imp->logical_block_size - on), > - uio->uio_resid); > + n = ulmin(imp->logical_block_size - on, uio->uio_resid); The subtraction can't overflow, because blkoff is basically a uio->uio_offset % imp->logical_block_size. ulmin() protects against truncation. The result is always positive and making n size_t is straightforward. > diff = (off_t)ip->i_size - uio->uio_offset; > if (diff <= 0) > return (0); > @@ -270,13 +270,13 @@ cd9660_read(void *v) > } else > error = bread(vp, lbn, size, &bp); > ci->ci_lastr = lbn; > - n = min(n, size - bp->b_resid); > + n = ulmin(n, size - bp->b_resid); bp->b_resid is supposed to be <= size because it's the remaining I/O to get the whole buf filled with size bytes. So bp->b_resid should be initialized with size initially and then only decrease. > if (error) { > brelse(bp); > return (error); > } > > - error = uiomovei(bp->b_data + on, (int)n, uio); > + error = uiomove(bp->b_data + on, n, uio); Straightforward with n being a size_t. > brelse(bp); > } while (error == 0 && uio->uio_resid > 0 && n != 0); > @@ -344,7 +344,7 @@ iso_uiodir(idp,dp,off) > } > > dp->d_off = off; > - if ((error = uiomovei((caddr_t)dp, dp->d_reclen, idp->uio)) != 0) > + if ((error = uiomove(dp, dp->d_reclen, idp->uio)) != 0) Straightforward. dp->d_reclen is unsigned. > return (error); > idp->uio_off = off; > return (0); > @@ -657,7 +657,7 @@ cd9660_readlink(void *v) > */ > if (uio->uio_segflg != UIO_SYSSPACE || > uio->uio_iov->iov_len < MAXPATHLEN) { > - error = uiomovei(symname, symlen, uio); > + error = uiomove(symname, symlen, uio); Straightforward, symlen is unsigned. Also did some checking that computation of symlen does not wrap around also. > pool_put(&namei_pool, symname); > return (error); > } >