Skip to content

Commit 95cbe7b

Browse files
committed
fs/mem: make lstat compliant with POSIX
1 parent cb1f6f9 commit 95cbe7b

1 file changed

Lines changed: 14 additions & 10 deletions

File tree

src/fs/mem.rs

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -627,15 +627,17 @@ impl VfsNode for MemDirectory {
627627
block_on(
628628
async {
629629
let (component, rest) = path.split_once("/").unwrap_or((path, ""));
630+
let inner = self.inner.read().await;
631+
let node = inner.get(component).ok_or(Errno::Badf)?;
630632

631633
if !rest.is_empty() {
632-
let inner = self.inner.read().await;
633-
let directory = inner.get(component).ok_or(Errno::Badf)?;
634-
return directory.traverse_lstat(rest);
634+
if node.get_kind() == NodeKind::File {
635+
Err(Errno::Notdir)?;
636+
}
637+
638+
return node.traverse_lstat(rest);
635639
}
636640

637-
let inner = self.inner.read().await;
638-
let node = inner.get(component).ok_or(Errno::Badf)?;
639641
node.get_file_attributes()
640642
},
641643
None,
@@ -646,15 +648,17 @@ impl VfsNode for MemDirectory {
646648
block_on(
647649
async {
648650
let (component, rest) = path.split_once("/").unwrap_or((path, ""));
651+
let inner = self.inner.read().await;
652+
let node = inner.get(component).ok_or(Errno::Badf)?;
649653

650654
if !rest.is_empty() {
651-
let inner = self.inner.read().await;
652-
let directory = inner.get(component).ok_or(Errno::Badf)?;
653-
return directory.traverse_stat(rest);
655+
if node.get_kind() == NodeKind::File {
656+
Err(Errno::Notdir)?;
657+
}
658+
659+
return node.traverse_stat(rest);
654660
}
655661

656-
let inner = self.inner.read().await;
657-
let node = inner.get(component).ok_or(Errno::Badf)?;
658662
node.get_file_attributes()
659663
},
660664
None,

0 commit comments

Comments
 (0)