feat(ext4): mkdir and nested directory support

This commit is contained in:
2026-10-18 23:16:35 +02:00
parent 2ede01bdd2
commit bc4659eabd
3 changed files with 117 additions and 1 deletions

View File

@@ -413,6 +413,48 @@ fn create_with_missing_parent_fails() {
assert!(fs.create(b"nodir/file.txt").is_none());
}
#[test]
fn mkdir_creates_directory() {
let mut fs = Ext4::mount(format_ext4_disk()).unwrap();
assert!(fs.mkdir(b"subdir"));
let mut entries = [DirEntry::empty(); 8];
let count = fs.list_dir(b"/", &mut entries).unwrap();
assert!(entries[..count].iter().any(|e| e.name.as_bytes() == b"subdir" && e.is_dir));
}
#[test]
fn create_file_in_subdirectory() {
let mut fs = Ext4::mount(format_ext4_disk()).unwrap();
assert!(fs.mkdir(b"docs"));
let h = fs.create(b"docs/readme").unwrap();
fs.write(h, b"content").unwrap();
fs.close(h);
let h = fs.open(b"docs/readme").unwrap();
let mut buf = [0u8; 32];
let n = fs.read(h, &mut buf).unwrap();
assert_eq!(&buf[..n], b"content");
fs.close(h);
}
#[test]
fn list_subdirectory() {
let mut fs = Ext4::mount(format_ext4_disk()).unwrap();
assert!(fs.mkdir(b"mydir"));
let h1 = fs.create(b"mydir/a.txt").unwrap();
fs.close(h1);
let h2 = fs.create(b"mydir/b.txt").unwrap();
fs.close(h2);
let mut entries = [DirEntry::empty(); 8];
let count = fs.list_dir(b"mydir", &mut entries).unwrap();
assert_eq!(count, 2);
}
#[test]
fn mkdir_nonexistent_parent_fails() {
let mut fs = Ext4::mount(format_ext4_disk()).unwrap();
assert!(!fs.mkdir(b"noparent/child"));
}
#[test]
fn read_past_eof_returns_zero() {
let mut fs = Ext4::mount(format_ext4_disk()).unwrap();