From 1e16c002795db2e8b30b9750df22683bd50fac16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20A=C3=9Fmus?= Date: Wed, 24 Mar 2010 16:48:33 +0000 Subject: [PATCH] * Don't store a possibly negative return value in an unsigned size_t, which is later used as parameter to memcpy(). Should fix r5623 (untested). * Fixed coding style for some comments. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35944 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kits/support/BufferIO.cpp | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/kits/support/BufferIO.cpp b/src/kits/support/BufferIO.cpp index a3aa536a0c..f6d1cc9afd 100644 --- a/src/kits/support/BufferIO.cpp +++ b/src/kits/support/BufferIO.cpp @@ -73,14 +73,21 @@ BBufferIO::ReadAt(off_t pos, void* buffer, size_t size) || pos < fBufferStart || pos > fBufferStart + fBufferUsed || pos + size > fBufferStart + fBufferUsed) { - if (fBufferIsDirty) - Flush(); // If there are pending writes, do them. + if (fBufferIsDirty) { + // If there are pending writes, do them. + Flush(); + } // ...cache as much as we can from the stream - fBufferUsed = fStream->ReadAt(pos, fBuffer, fBufferSize); + ssize_t sizeRead = fStream->ReadAt(pos, fBuffer, fBufferSize); + if (sizeRead < 0) + return sizeRead; - if (fBufferUsed > 0) - fBufferStart = pos; // The data is buffered starting from this offset + fBufferUsed = sizeRead; + if (fBufferUsed > 0) { + // The data is buffered starting from this offset + fBufferStart = pos; + } } size = min_c(size, fBufferUsed); @@ -117,7 +124,8 @@ BBufferIO::WriteAt(off_t pos, const void* buffer, size_t size) ssize_t read; off_t where = pos; - if (pos + size <= fBufferSize) // Can we just cache from the beginning ? + // Can we just cache from the beginning? + if (pos + size <= fBufferSize) where = 0; // ...cache more.