Date: Sun, 05 Jun 2011 16:22:02 +0000 From: gk@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r222845 - in soc2011/gk/ino64-head/sys: compat/freebsd32 kern sys Message-ID: <20110605162202.35A92106564A@hub.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: gk Date: Sun Jun 5 16:22:01 2011 New Revision: 222845 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=222845 Log: Extend kern_getdirentries to accept segflg and return buffer residue Modified: soc2011/gk/ino64-head/sys/compat/freebsd32/freebsd32_misc.c soc2011/gk/ino64-head/sys/kern/vfs_syscalls.c soc2011/gk/ino64-head/sys/sys/syscallsubr.h Modified: soc2011/gk/ino64-head/sys/compat/freebsd32/freebsd32_misc.c ============================================================================== --- soc2011/gk/ino64-head/sys/compat/freebsd32/freebsd32_misc.c Sun Jun 5 16:21:49 2011 (r222844) +++ soc2011/gk/ino64-head/sys/compat/freebsd32/freebsd32_misc.c Sun Jun 5 16:22:01 2011 (r222845) @@ -1485,7 +1485,8 @@ int32_t base32; int error; - error = kern_getdirentries(td, uap->fd, uap->buf, uap->count, &base); + error = kern_getdirentries(td, uap->fd, uap->buf, uap->count, + &base, NULL, UIO_USERSPACE); if (error) return (error); if (uap->basep != NULL) { Modified: soc2011/gk/ino64-head/sys/kern/vfs_syscalls.c ============================================================================== --- soc2011/gk/ino64-head/sys/kern/vfs_syscalls.c Sun Jun 5 16:21:49 2011 (r222844) +++ soc2011/gk/ino64-head/sys/kern/vfs_syscalls.c Sun Jun 5 16:22:01 2011 (r222845) @@ -4062,7 +4062,8 @@ long base; int error; - error = kern_getdirentries(td, uap->fd, uap->buf, uap->count, &base); + error = kern_getdirentries(td, uap->fd, uap->buf, uap->count, &base, + NULL, UIO_USERSPACE); if (error) return (error); if (uap->basep != NULL) @@ -4072,7 +4073,7 @@ int kern_getdirentries(struct thread *td, int fd, char *buf, u_int count, - long *basep) + long *basep, ssize_t *residp, enum uio_seg bufseg) { struct vnode *vp; struct file *fp; @@ -4104,7 +4105,7 @@ auio.uio_iov = &aiov; auio.uio_iovcnt = 1; auio.uio_rw = UIO_READ; - auio.uio_segflg = UIO_USERSPACE; + auio.uio_segflg = bufseg; auio.uio_td = td; auio.uio_resid = count; vn_lock(vp, LK_SHARED | LK_RETRY); @@ -4138,6 +4139,8 @@ VOP_UNLOCK(vp, 0); VFS_UNLOCK_GIANT(vfslocked); *basep = loff; + if (residp != NULL) + *residp = auio.uio_resid; td->td_retval[0] = count - auio.uio_resid; fail: fdrop(fp, td); Modified: soc2011/gk/ino64-head/sys/sys/syscallsubr.h ============================================================================== --- soc2011/gk/ino64-head/sys/sys/syscallsubr.h Sun Jun 5 16:21:49 2011 (r222844) +++ soc2011/gk/ino64-head/sys/sys/syscallsubr.h Sun Jun 5 16:22:01 2011 (r222845) @@ -97,7 +97,7 @@ int kern_futimes(struct thread *td, int fd, struct timeval *tptr, enum uio_seg tptrseg); int kern_getdirentries(struct thread *td, int fd, char *buf, u_int count, - long *basep); + long *basep, ssize_t *residp, enum uio_seg bufseg); int kern_getfsstat(struct thread *td, struct statfs **buf, size_t bufsize, enum uio_seg bufseg, int flags); int kern_getgroups(struct thread *td, u_int *ngrp, gid_t *groups);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20110605162202.35A92106564A>