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:
committed by
waddlesplash
parent
4b34eedc59
commit
46fb8f1ca3
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user