parent
1fbda15575
commit
80d72a9853
@ -0,0 +1,29 @@
|
|||||||
|
use vfs::{INode, Result};
|
||||||
|
use alloc::sync::Arc;
|
||||||
|
|
||||||
|
pub struct File {
|
||||||
|
inode: Arc<INode>,
|
||||||
|
offset: usize,
|
||||||
|
readable: bool,
|
||||||
|
writable: bool,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl File {
|
||||||
|
pub fn new(inode: Arc<INode>, readable: bool, writable: bool) -> Self {
|
||||||
|
File { inode, offset: 0, readable, writable }
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn read(&mut self, buf: &mut [u8]) -> Result<usize> {
|
||||||
|
assert!(self.readable);
|
||||||
|
let len = self.inode.read_at(self.offset, buf)?;
|
||||||
|
self.offset += len;
|
||||||
|
Ok(len)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn write(&mut self, buf: &[u8]) -> Result<usize> {
|
||||||
|
assert!(self.writable);
|
||||||
|
let len = self.inode.write_at(self.offset, buf)?;
|
||||||
|
self.offset += len;
|
||||||
|
Ok(len)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in new issue