fs/dirent: add d_ino member to struct dirent

Add the POSIX d_ino (file serial number) member to struct dirent and
populate it on every readdir() path, so portable callers (e.g. scp in
dropbear) that read dp->d_ino observe a meaningful, non-zero inode
number:

  - include/dirent.h: declare d_ino in struct dirent and drop the
    outdated comment claiming the field is unimplemented.
  - include/nuttx/fs/hostfs.h: add d_ino to struct nuttx_dirent_s so
    the hostfs ABI can carry the inode number across the VFS boundary.
  - arch/sim/src/sim/posix/sim_hostfs.c: forward the host's
    ent->d_ino into entry->d_ino.
  - fs/vfs/fs_dir.c (read_pseudodir): copy the in-memory inode's
    i_ino into entry->d_ino for the pseudo filesystem.
  - fs/yaffs/yaffs_vfs.c: forward yaffs's dirent->d_ino into
    entry->d_ino.
  - fs/rpmsgfs: extend struct rpmsgfs_readdir_s with an 'ino' field
    and propagate it across the RPC in both rpmsgfs_server (fills it
    from the underlying entry) and rpmsgfs_client (writes it back to
    the caller's nuttx_dirent_s).

Signed-off-by: Xiang Xiao <xiaoxiang@xiaomi.com>
This commit is contained in:
Xiang Xiao 2026-06-09 13:29:16 +08:00 committed by Matteo Golin
parent 50377d0909
commit 2ea2655bc6
7 changed files with 10 additions and 1 deletions

View file

@ -107,11 +107,12 @@
* of char containing at least {NAME_MAX} plus one elements.
*
* POSIX also requires the field d_ino (type ino_t) that provides the file
* serial number. This functionality is not implemented in NuttX.
* serial number.
*/
struct dirent
{
ino_t d_ino; /* File serial number */
uint8_t d_type; /* Type of file */
char d_name[NAME_MAX + 1]; /* File name */
};

View file

@ -150,6 +150,7 @@ struct nuttx_timespec
struct nuttx_dirent_s
{
nuttx_ino_t d_ino;
uint8_t d_type; /* type of file */
char d_name[CONFIG_NAME_MAX + 1]; /* filename */
};