summaryrefslogtreecommitdiff
path: root/sal/osl/unx/readwrite_helper.c
diff options
context:
space:
mode:
authorJulien Chaffraix <julien.chaffraix@gmail.com>2011-04-23 07:53:54 -0700
committerMichael Meeks <michael.meeks@novell.com>2011-04-26 15:13:59 +0100
commit051bd8d4f2a1f8ddc2d207c158d4c4aa02667cbe (patch)
tree06acce277c4471f3dfdc12445a35a49140800d44 /sal/osl/unx/readwrite_helper.c
parent567bfd0e92fe3d1b0d899974c913a1f8b1b48cbc (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.c26
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;
+}