* miscfuncs.cc (check_iovec_for_read): Don't check buffer when zero length
iov_len. (check_iovec_for_write): Ditto. * fhandler.h (fhandler_base::readv): New method. (fhandler_base::writev): Ditto. * fhandler.cc (fhandler_base::readv): New method. (fhandler_base::writev): Ditto. * syscalls.cc (_read): Delegate to readv(2). (_write): Ditto, mutatis mutandi. (readv): Rewrite, based on the old _read code, to use the new fhandler_base::readv method. Improve access mode handling and ensure all calls reach the final strace statement. (writev): Ditto, mutatis mutandi. * include/sys/uio.h (struct iovec): Change field types to match SUSv3. * winsup.h (check_iovec_for_read): New function. (check_iovec_for_write): Ditto. * miscfuncs.cc (check_iovec_for_read): Ditto. (check_iovec_for_write): Ditto.
This commit is contained in:
@ -116,6 +116,7 @@ class path_conv;
|
||||
class fhandler_disk_file;
|
||||
typedef struct __DIR DIR;
|
||||
struct dirent;
|
||||
struct iovec;
|
||||
|
||||
enum bg_check_types
|
||||
{
|
||||
@ -297,6 +298,8 @@ class fhandler_base
|
||||
virtual char const * ttyname () { return get_name(); }
|
||||
virtual int __stdcall read (void *ptr, size_t len) __attribute__ ((regparm (3)));
|
||||
virtual int write (const void *ptr, size_t len);
|
||||
virtual ssize_t readv (const struct iovec *, int iovcnt, ssize_t tot = -1);
|
||||
virtual ssize_t writev (const struct iovec *, int iovcnt, ssize_t tot = -1);
|
||||
virtual __off64_t lseek (__off64_t offset, int whence);
|
||||
virtual int lock (int, struct flock *);
|
||||
virtual void dump ();
|
||||
|
Reference in New Issue
Block a user