From 34d337fedb0301038c59188aa95ca4dd2dca7891 Mon Sep 17 00:00:00 2001 From: "Ibuki.O" Date: Wed, 21 Jan 2026 19:18:47 +0900 Subject: [PATCH] feat: Implement fstat handling in nsmgr. --- bootstrap/src/initnsmgr.rs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/bootstrap/src/initnsmgr.rs b/bootstrap/src/initnsmgr.rs index 7e79270388..7e0cc699ad 100644 --- a/bootstrap/src/initnsmgr.rs +++ b/bootstrap/src/initnsmgr.rs @@ -15,6 +15,7 @@ use redox_scheme::{ CallerCtx, OpenResult, RequestKind, Response, SendFdRequest, SignalBehavior, Socket, scheme::SchemeSync, }; +use syscall::Stat; use syscall::dirent::{DirEntry, DirentBuf, DirentKind}; use syscall::{CallFlags, FobtainFdFlags, error::*, schemev2::NewFdFlags}; @@ -429,6 +430,27 @@ impl<'sock> SchemeSync for NamespaceScheme<'sock> { Ok(buf) } + + fn fstat(&mut self, id: usize, stat: &mut Stat, ctx: &CallerCtx) -> Result<()> { + let resource_stat = match self.handles.get(&id).ok_or(Error::new(EBADF))? { + Handle::List(_) => Stat { + st_mode: 0o444 | syscall::MODE_DIR, + st_uid: 0, + st_gid: 0, + st_size: 0, + ..Default::default() + }, + Handle::Access(_) | Handle::Register(_) => Stat { + st_mode: 0o666 | syscall::MODE_FILE, + st_uid: 0, + st_gid: 0, + st_size: 0, + ..Default::default() + }, + }; + *stat = resource_stat; + Ok(()) + } } trait NumFromBytes: Sized + Debug {