Commit 9150faf4 authored by 只敲代码不玩耍,聪明baka也变傻ᗜˬᗜ's avatar 只敲代码不玩耍,聪明baka也变傻ᗜˬᗜ :man_dancing_tone1:
Browse files

fix: improve read behavior in FatFileInode to handle EOF correctly

Showing with 21 additions and 12 deletions
+21 -12
......@@ -223,24 +223,33 @@ impl IInode for FatFileInode {
buffer: &mut [u8],
) -> filesystem_abstractions::FileSystemResult<usize> {
let mut locked_inner = self.inner.lock();
if offset >= locked_inner.size {
return Ok(0);
}
let file_size = locked_inner.size;
let pos = SeekFrom::Start(offset as u64);
let mut bytes_read = 0;
locked_inner.inner.seek(pos).map_err(from_fatfs_error)?;
if offset < file_size {
let pos = SeekFrom::Start(offset as u64);
let len = locked_inner.size as u64;
locked_inner.inner.seek(pos).map_err(from_fatfs_error)?;
let rlen = Ord::min(buffer.len(), len as usize - offset);
let rlen = Ord::min(buffer.len(), file_size - offset);
locked_inner
.inner
.read_exact(&mut buffer[..rlen])
.map_err(from_fatfs_error)?;
locked_inner
.inner
.read_exact(&mut buffer[..rlen])
.map_err(from_fatfs_error)?;
bytes_read = rlen;
}
// Add EOF if reached the end
if buffer.len() > file_size - offset {
const EOF: u8 = 0;
buffer[file_size - offset] = EOF;
bytes_read += 1;
}
Ok(rlen)
Ok(bytes_read)
}
fn writeat(
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment