BBufferIO: takes buffer start in account when using pos

inspired by some fixes in V/OS

Change-Id: I9bad77d0bce46c36ca80573ea4e77563071a8241
Reviewed-on: https://review.haiku-os.org/c/haiku/+/11278
Reviewed-by: waddlesplash <[email protected]>
Haiku-Format: Haiku-format Bot <[email protected]>
(cherry picked from commit f00cbd3d2bf1f577953dac063f258848bbd06a70)
Reviewed-on: https://review.haiku-os.org/c/haiku/+/11279
This commit is contained in:
Jérôme Duval
2026-07-20 16:56:09 +00:00
committed by waddlesplash
parent 4b34eedc59
commit 46fb8f1ca3
+8 -4
View File
@@ -90,10 +90,12 @@ BBufferIO::ReadAt(off_t pos, void* buffer, size_t size)
}
}
size = min_c(size, fBufferUsed);
// position in buffer
pos -= fBufferStart;
size = min_c(size, fBufferUsed - (size_t)pos);
// copy data from the cache to the given buffer
memcpy(buffer, fBuffer + pos - fBufferStart, size);
memcpy(buffer, fBuffer + pos, size);
return size;
}
@@ -136,10 +138,12 @@ BBufferIO::WriteAt(off_t pos, const void* buffer, size_t size)
}
}
memcpy(fBuffer + pos - fBufferStart, buffer, size);
// position in buffer
pos -= fBufferStart;
memcpy(fBuffer + pos, buffer, size);
fBufferIsDirty = true;
fBufferUsed = max_c((size + pos), fBufferUsed);
fBufferUsed = max_c(size + pos, fBufferUsed);
return size;
}