From 82af2c10b5b093496bfb6d29f4a7068dd158f943 Mon Sep 17 00:00:00 2001 From: Julien Chaffraix Date: Sat, 30 Apr 2011 16:37:49 -0700 Subject: Properly advance the data / buffer pointer. Spotted by Michael Meeks. --- sal/osl/unx/readwrite_helper.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'sal/osl/unx') diff --git a/sal/osl/unx/readwrite_helper.c b/sal/osl/unx/readwrite_helper.c index 51e1ec6b6..e2598953e 100644 --- a/sal/osl/unx/readwrite_helper.c +++ b/sal/osl/unx/readwrite_helper.c @@ -35,10 +35,12 @@ sal_Bool safeWrite(int fd, void* data, sal_uInt32 dataSize) { sal_Int32 nToWrite = dataSize; + unsigned char* dataToWrite = data; + // Check for overflow as we convert a signed to an unsigned. OSL_ASSERT(dataSize == (sal_uInt32)nToWrite); while ( nToWrite ) { - sal_Int32 nWritten = write(fd, data, nToWrite); + sal_Int32 nWritten = write(fd, dataToWrite, nToWrite); if ( nWritten < 0 ) { if ( errno == EINTR ) continue; @@ -49,6 +51,7 @@ sal_Bool safeWrite(int fd, void* data, sal_uInt32 dataSize) OSL_ASSERT(nWritten > 0); nToWrite -= nWritten; + dataToWrite += nWritten; } return sal_True; @@ -57,10 +60,12 @@ sal_Bool safeWrite(int fd, void* data, sal_uInt32 dataSize) sal_Bool safeRead( int fd, void* buffer, sal_uInt32 count ) { sal_Int32 nToRead = count; + unsigned char* bufferForReading = buffer; + // 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); + sal_Int32 nRead = read(fd, bufferForReading, nToRead); if ( nRead < 0 ) { // We were interrupted before reading, retry. if (errno == EINTR) @@ -75,6 +80,7 @@ sal_Bool safeRead( int fd, void* buffer, sal_uInt32 count ) return sal_False; nToRead -= nRead; + bufferForReading += nRead; } return sal_True; -- cgit v1.2.3