Skip to content

Commit 15d84c9

Browse files
authored
Merge pull request #275 from 879650736/axfs
Enhance truncate,add urandom ,update axfs_crates dependencies
2 parents 65e97ac + 93431f3 commit 15d84c9

File tree

3 files changed

+28
-8
lines changed

3 files changed

+28
-8
lines changed

Cargo.lock

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

modules/axfs/src/fs/fatfs.rs

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,26 @@ impl VfsNodeOps for FileWrapper<'static> {
8787

8888
fn truncate(&self, size: u64) -> VfsResult {
8989
let mut file = self.0.lock();
90-
file.seek(SeekFrom::Start(size)).map_err(as_vfs_err)?; // TODO: more efficient
91-
file.truncate().map_err(as_vfs_err)
90+
let current_size = file.seek(SeekFrom::End(0)).map_err(as_vfs_err)?;
91+
92+
if size <= current_size {
93+
// If the target size is smaller than the current size,
94+
// perform a standard truncation operation
95+
file.seek(SeekFrom::Start(size)).map_err(as_vfs_err)?; // TODO: more efficient
96+
file.truncate().map_err(as_vfs_err)
97+
} else {
98+
// Calculate the number of bytes to fill
99+
let mut zeros_needed = size - current_size;
100+
// Create a buffer of zeros
101+
let zeros = [0u8; 4096];
102+
while zeros_needed > 0 {
103+
let to_write = core::cmp::min(zeros_needed, zeros.len() as u64);
104+
let write_buf = &zeros[..to_write as usize];
105+
file.write(write_buf).map_err(as_vfs_err)?;
106+
zeros_needed -= to_write;
107+
}
108+
Ok(())
109+
}
92110
}
93111
}
94112

modules/axfs/src/mounts.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,13 @@ use crate::fs;
77
pub(crate) fn devfs() -> Arc<fs::devfs::DeviceFileSystem> {
88
let null = fs::devfs::NullDev;
99
let zero = fs::devfs::ZeroDev;
10+
let urandom = fs::devfs::UrandomDev::default();
1011
let bar = fs::devfs::ZeroDev;
1112
let devfs = fs::devfs::DeviceFileSystem::new();
1213
let foo_dir = devfs.mkdir("foo");
1314
devfs.add("null", Arc::new(null));
1415
devfs.add("zero", Arc::new(zero));
16+
devfs.add("urandom", Arc::new(urandom));
1517
foo_dir.add("bar", Arc::new(bar));
1618
Arc::new(devfs)
1719
}

0 commit comments

Comments
 (0)