diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-12-17 10:59:13 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-12-20 10:31:53 +0100 |
commit | c1d8ee4cdc094b3595d2f4d0cdfc17a53f85716c (patch) | |
tree | 4416b3030bf83416219e5d36039a3bafa84fcbbe /cpukit/libfs/src/defaults | |
parent | Filesystem: Use default kqfilter and poll handler (diff) | |
download | rtems-c1d8ee4cdc094b3595d2f4d0cdfc17a53f85716c.tar.bz2 |
libcsupport: Accept NULL for zero-length entries
Diffstat (limited to 'cpukit/libfs/src/defaults')
-rw-r--r-- | cpukit/libfs/src/defaults/default_readv.c | 24 | ||||
-rw-r--r-- | cpukit/libfs/src/defaults/default_writev.c | 24 |
2 files changed, 28 insertions, 20 deletions
diff --git a/cpukit/libfs/src/defaults/default_readv.c b/cpukit/libfs/src/defaults/default_readv.c index 063ed5e678..0156a4138f 100644 --- a/cpukit/libfs/src/defaults/default_readv.c +++ b/cpukit/libfs/src/defaults/default_readv.c @@ -41,19 +41,23 @@ ssize_t rtems_filesystem_default_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 - ); + size_t len = iov[ v ].iov_len; - if ( bytes < 0 ) - return -1; + if ( len > 0 ) { + ssize_t bytes = ( *iop->pathinfo.handlers->read_h )( + iop, + iov[ v ].iov_base, + len + ); - total += bytes; + if ( bytes < 0 ) + return -1; - if ( bytes != iov[ v ].iov_len ) - break; + total += bytes; + + if ( bytes != ( ssize_t ) len ) + break; + } } return total; diff --git a/cpukit/libfs/src/defaults/default_writev.c b/cpukit/libfs/src/defaults/default_writev.c index e62e084e72..3a4ed82c00 100644 --- a/cpukit/libfs/src/defaults/default_writev.c +++ b/cpukit/libfs/src/defaults/default_writev.c @@ -41,19 +41,23 @@ ssize_t rtems_filesystem_default_writev( total = 0; for ( v = 0 ; v < iovcnt ; ++v ) { - ssize_t bytes = ( *iop->pathinfo.handlers->write_h )( - iop, - iov[ v ].iov_base, - iov[ v ].iov_len - ); + size_t len = iov[ v ].iov_len; - if ( bytes < 0 ) - return -1; + if ( len > 0 ) { + ssize_t bytes = ( *iop->pathinfo.handlers->write_h )( + iop, + iov[ v ].iov_base, + len + ); - total += bytes; + if ( bytes < 0 ) + return -1; - if ( bytes != iov[ v ].iov_len ) - break; + total += bytes; + + if ( bytes != ( ssize_t ) len ) + break; + } } return total; |