Skip to content

Commit a2c2e1c

Browse files
committed
add Ext2Fs::write_block
1 parent 1543007 commit a2c2e1c

File tree

2 files changed

+16
-9
lines changed

2 files changed

+16
-9
lines changed

ext2/src/error.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ pub enum Error {
88
NotDirectory,
99
NotRegularFile,
1010
DeviceRead,
11+
DeviceWrite,
1112
InvalidInodeAddress(u32),
1213
}
1314

ext2/src/lib.rs

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,14 @@ extern crate alloc;
55

66
use alloc::vec;
77

8+
pub use address::*;
9+
pub use dir::*;
10+
pub use error::*;
11+
pub use file::*;
12+
use filesystem::BlockDevice;
13+
pub use inode::*;
14+
pub use superblock::*;
15+
816
use crate::block_group::{BlockGroupDescriptor, BlockGroupDescriptorTable};
917

1018
mod address;
@@ -16,15 +24,6 @@ mod file;
1624
mod inode;
1725
mod superblock;
1826

19-
use filesystem::BlockDevice;
20-
21-
pub use address::*;
22-
pub use dir::*;
23-
pub use error::*;
24-
pub use file::*;
25-
pub use inode::*;
26-
pub use superblock::*;
27-
2827
const ROOT_DIR_INODE_ADDRESS: InodeAddress = InodeAddress::new(2).unwrap();
2928

3029
pub struct Ext2Fs<T> {
@@ -104,6 +103,13 @@ where
104103
.map_err(|_| Error::DeviceRead)
105104
}
106105

106+
pub fn write_block(&mut self, addr: BlockAddress, buf: &[u8]) -> Result<usize, Error> {
107+
let offset = self.resolve_block_offset(addr);
108+
self.block_device
109+
.write_at(offset, buf)
110+
.map_err(|_| Error::DeviceWrite)
111+
}
112+
107113
fn resolve_block_offset(&self, addr: BlockAddress) -> usize {
108114
(1024 + (addr.get() - 1) * self.superblock.block_size()) as usize
109115
}

0 commit comments

Comments
 (0)