diff options
author | Julien Chaffraix <julien.chaffraix@gmail.com> | 2011-04-23 07:53:54 -0700 |
---|---|---|
committer | Michael Meeks <michael.meeks@novell.com> | 2011-04-26 15:13:59 +0100 |
commit | 051bd8d4f2a1f8ddc2d207c158d4c4aa02667cbe (patch) | |
tree | 06acce277c4471f3dfdc12445a35a49140800d44 /sal/osl/unx/readwrite_helper.c | |
parent | 567bfd0e92fe3d1b0d899974c913a1f8b1b48cbc (diff) |
Introduced safeRead.
Same function as safeWrite. Converted some methods in process.c to use it.
This usually simplifies the code and add better error checking.
Diffstat (limited to 'sal/osl/unx/readwrite_helper.c')
-rw-r--r-- | sal/osl/unx/readwrite_helper.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/sal/osl/unx/readwrite_helper.c b/sal/osl/unx/readwrite_helper.c index 4777d08614a1..41aa41e7731a 100644 --- a/sal/osl/unx/readwrite_helper.c +++ b/sal/osl/unx/readwrite_helper.c @@ -48,3 +48,29 @@ sal_Bool safeWrite(int fd, void* data, sal_uInt32 dataSize) return sal_True; } + +sal_Bool safeRead( int fd, void* buffer, sal_uInt32 count ) +{ + sal_Int32 nToRead = count; + // Check for overflow as we convert a signed to an unsigned. + OSL_ASSERT(count == (sal_uInt32)nToRead); + while ( nToRead ) { + sal_Int32 nRead = read(fd, buffer, nToRead); + if ( nRead < 0 ) { + // We were interrupted before reading, retry. + if (errno == EINTR) + continue; + + return sal_False; + } + + // If we reach the EOF, we consider this a partial transfer and thus + // an error. + if ( nRead == 0 ) + return sal_False; + + nToRead -= nRead; + } + + return sal_True; +} |