Skip to content

Commit 245d46e

Browse files
authored
Merge pull request #2484 from hermit-os/lstat
fix(fs/mem): make lstat compliant with POSIX
2 parents d2179aa + b498d4c commit 245d46e

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
@@ -614,15 +614,17 @@ impl VfsNode for MemDirectory {
614614
block_on(
615615
async {
616616
let (component, rest) = path.split_once("/").unwrap_or((path, ""));
617+
let inner = self.inner.read().await;
618+
let node = inner.get(component).ok_or(Errno::Badf)?;
617619

618620
if !rest.is_empty() {
619-
let inner = self.inner.read().await;
620-
let directory = inner.get(component).ok_or(Errno::Badf)?;
621-
return directory.traverse_lstat(rest);
621+
if node.get_kind() == NodeKind::File {
622+
Err(Errno::Notdir)?;
623+
}
624+
625+
return node.traverse_lstat(rest);
622626
}
623627

624-
let inner = self.inner.read().await;
625-
let node = inner.get(component).ok_or(Errno::Badf)?;
626628
node.get_file_attributes()
627629
},
628630
None,
@@ -633,15 +635,17 @@ impl VfsNode for MemDirectory {
633635
block_on(
634636
async {
635637
let (component, rest) = path.split_once("/").unwrap_or((path, ""));
638+
let inner = self.inner.read().await;
639+
let node = inner.get(component).ok_or(Errno::Badf)?;
636640

637641
if !rest.is_empty() {
638-
let inner = self.inner.read().await;
639-
let directory = inner.get(component).ok_or(Errno::Badf)?;
640-
return directory.traverse_stat(rest);
642+
if node.get_kind() == NodeKind::File {
643+
Err(Errno::Notdir)?;
644+
}
645+
646+
return node.traverse_stat(rest);
641647
}
642648

643-
let inner = self.inner.read().await;
644-
let node = inner.get(component).ok_or(Errno::Badf)?;
645649
node.get_file_attributes()
646650
},
647651
None,

0 commit comments

Comments
 (0)