From 0c444b426502f339bca1785082081a6e069e19c2 Mon Sep 17 00:00:00 2001 From: Stefano Ceccherini Date: Tue, 24 Sep 2002 15:48:09 +0000 Subject: [PATCH] Changed the way WriteAt() works, and fixed a small bug in SetSize() git-svn-id: file:///srv/svn/repos/haiku/trunk/current@1157 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kits/support/DataIO.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/kits/support/DataIO.cpp b/src/kits/support/DataIO.cpp index 0f952fb520..ea427828fe 100644 --- a/src/kits/support/DataIO.cpp +++ b/src/kits/support/DataIO.cpp @@ -340,10 +340,17 @@ BMallocIO::WriteAt(off_t pos, const void *buffer, size_t size) return B_BAD_VALUE; size_t newSize = max(pos + size, static_cast(fLength)); - status_t error = SetSize(newSize); - if (error == B_OK) + + if (newSize > fMallocSize) + if (SetSize(newSize) != B_OK) + size = 0; + + if (size > 0) { memcpy(fData + pos, buffer, size); - return (error != B_OK ? error : size); + if (pos + size > fLength) + fLength = pos + size; + } + return size; } @@ -396,7 +403,6 @@ BMallocIO::SetSize(off_t size) memset(newData + fMallocSize, 0, newSize - fMallocSize); fData = newData; fMallocSize = newSize; - fLength = newSize; } else // couldn't alloc the memory error = B_NO_MEMORY; }