forked from Bananymous/banan-os
Kernel: Fix ext2 file write
This commit is contained in:
parent
c55bb77ff5
commit
aa59142bfa
|
@ -227,7 +227,7 @@ namespace Kernel
|
|||
|
||||
const uint8_t* u8buffer = (const uint8_t*)buffer;
|
||||
|
||||
size_t written = 0;
|
||||
size_t to_write = count;
|
||||
|
||||
// Write partial block
|
||||
if (offset % block_size)
|
||||
|
@ -236,7 +236,7 @@ namespace Kernel
|
|||
uint32_t block_offset = offset % block_size;
|
||||
|
||||
uint32_t data_block_index = TRY(this->data_block_index(block_index));
|
||||
uint32_t to_copy = BAN::Math::min<uint32_t>(block_size - block_offset, written);
|
||||
uint32_t to_copy = BAN::Math::min<uint32_t>(block_size - block_offset, to_write);
|
||||
|
||||
m_fs.read_block(data_block_index, block_buffer.span());
|
||||
memcpy(block_buffer.data() + block_offset, buffer, to_copy);
|
||||
|
@ -244,10 +244,10 @@ namespace Kernel
|
|||
|
||||
u8buffer += to_copy;
|
||||
offset += to_copy;
|
||||
written -= to_copy;
|
||||
to_write -= to_copy;
|
||||
}
|
||||
|
||||
while (written >= block_size)
|
||||
while (to_write >= block_size)
|
||||
{
|
||||
uint32_t data_block_index = TRY(this->data_block_index(offset / block_size));
|
||||
|
||||
|
@ -255,15 +255,15 @@ namespace Kernel
|
|||
|
||||
u8buffer += block_size;
|
||||
offset += block_size;
|
||||
written -= block_size;
|
||||
to_write -= block_size;
|
||||
}
|
||||
|
||||
if (written > 0)
|
||||
if (to_write > 0)
|
||||
{
|
||||
uint32_t data_block_index = TRY(this->data_block_index(offset / block_size));
|
||||
|
||||
m_fs.read_block(data_block_index, block_buffer.span());
|
||||
memcpy(block_buffer.data(), u8buffer, written);
|
||||
memcpy(block_buffer.data(), u8buffer, to_write);
|
||||
m_fs.write_block(data_block_index, block_buffer.span());
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue