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);
 }

Reply via email to