Below is a diff to convert videoread() to use uiomove() instead of
uiomovei(). Note, that passing sc_fsize to ulmin() is not problematic,
even though it is an int, because the value is always positive.
cheers,
natano
Index: dev/video.c
===================================================================
RCS file: /cvs/src/sys/dev/video.c,v
retrieving revision 1.37
diff -u -p -u -r1.37 video.c
--- dev/video.c 29 Aug 2015 20:51:46 -0000 1.37
+++ dev/video.c 1 Jan 2016 14:31:24 -0000
@@ -136,7 +136,8 @@ int
videoread(dev_t dev, struct uio *uio, int ioflag)
{
struct video_softc *sc;
- int unit, error, size;
+ int unit, error;
+ size_t size;
unit = VIDEOUNIT(dev);
if (unit >= video_cd.cd_ndevs ||
@@ -169,16 +170,13 @@ videoread(dev_t dev, struct uio *uio, in
}
/* move no more than 1 frame to userland, as per specification */
- if (sc->sc_fsize < uio->uio_resid)
- size = sc->sc_fsize;
- else
- size = uio->uio_resid;
- error = uiomovei(sc->sc_fbuffer, size, uio);
+ size = ulmin(uio->uio_resid, sc->sc_fsize);
+ error = uiomove(sc->sc_fbuffer, size, uio);
sc->sc_frames_ready--;
if (error)
return (error);
- DPRINTF(("uiomove successfully done (%d bytes)\n", size));
+ DPRINTF(("uiomove successfully done (%zu bytes)\n", size));
return (0);
}