diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-12-16 13:44:13 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-12-20 10:31:53 +0100 |
commit | 2f68778f08471fb7f13a8634ebb48c6db13c0f69 (patch) | |
tree | eae0deea88cc0d81052f8497a668dfaeecd6de40 /cpukit/libcsupport/src/readv.c | |
parent | libcsupport: Add and use rtems_libio_iovec_eval() (diff) | |
download | rtems-2f68778f08471fb7f13a8634ebb48c6db13c0f69.tar.bz2 |
Filesystem: Add readv/writev handlers
The readv() and writev() support was implemented in terms of multiple
calls to the read and write handlers. This imposes a problem on device
files which use an IO vector as single request entity. For example a
low-level network device (e.g. BPF(4)) may use an IO vector to create
one frame from multiple protocol layers each with its own IO vector
entry.
Diffstat (limited to 'cpukit/libcsupport/src/readv.c')
-rw-r--r-- | cpukit/libcsupport/src/readv.c | 21 |
1 files changed, 1 insertions, 20 deletions
diff --git a/cpukit/libcsupport/src/readv.c b/cpukit/libcsupport/src/readv.c index e47f22850a..6a4e0579f3 100644 --- a/cpukit/libcsupport/src/readv.c +++ b/cpukit/libcsupport/src/readv.c @@ -36,31 +36,12 @@ ssize_t readv( ) { ssize_t total; - int v; rtems_libio_t *iop; total = rtems_libio_iovec_eval( fd, iov, iovcnt, LIBIO_FLAGS_READ, &iop ); if ( total > 0 ) { - /* - * Now process the readv(). - */ - total = 0; - for ( v = 0 ; v < iovcnt ; v++ ) { - ssize_t bytes = ( *iop->pathinfo.handlers->read_h )( - iop, - iov[ v ].iov_base, - iov[ v ].iov_len - ); - - if ( bytes < 0 ) - return -1; - - total += bytes; - - if ( bytes != iov[ v ].iov_len ) - break; - } + total = ( *iop->pathinfo.handlers->readv_h )( iop, iov, iovcnt, total ); } return total; |