summaryrefslogtreecommitdiffstats
path: root/cpukit
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2013-12-17 10:59:13 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2013-12-20 10:31:53 +0100
commitc1d8ee4cdc094b3595d2f4d0cdfc17a53f85716c (patch)
tree4416b3030bf83416219e5d36039a3bafa84fcbbe /cpukit
parentFilesystem: Use default kqfilter and poll handler (diff)
downloadrtems-c1d8ee4cdc094b3595d2f4d0cdfc17a53f85716c.tar.bz2
libcsupport: Accept NULL for zero-length entries
Diffstat (limited to 'cpukit')
-rw-r--r--cpukit/libcsupport/include/rtems/libio_.h2
-rw-r--r--cpukit/libfs/src/defaults/default_readv.c24
-rw-r--r--cpukit/libfs/src/defaults/default_writev.c24
3 files changed, 29 insertions, 21 deletions
diff --git a/cpukit/libcsupport/include/rtems/libio_.h b/cpukit/libcsupport/include/rtems/libio_.h
index 995d621f79..78a57c8620 100644
--- a/cpukit/libcsupport/include/rtems/libio_.h
+++ b/cpukit/libcsupport/include/rtems/libio_.h
@@ -887,7 +887,7 @@ static inline ssize_t rtems_libio_iovec_eval(
total += ( ssize_t ) len;
- if ( iov[ v ].iov_base == NULL ) {
+ if ( iov[ v ].iov_base == NULL && len != 0 ) {
rtems_set_errno_and_return_minus_one( EINVAL );
}
}
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;