diff --git a/fs/tmpfs/fs_tmpfs.c b/fs/tmpfs/fs_tmpfs.c index 85682620320..c9cf528b7d7 100644 --- a/fs/tmpfs/fs_tmpfs.c +++ b/fs/tmpfs/fs_tmpfs.c @@ -1962,7 +1962,7 @@ static int tmpfs_opendir(FAR struct inode *mountpt, FAR const char *relpath, if (ret >= 0) { dir->u.tmpfs.tf_tdo = tdo; - dir->u.tmpfs.tf_index = 0; + dir->u.tmpfs.tf_index = tdo->tdo_nentries; tmpfs_unlock_directory(tdo); } @@ -2022,7 +2022,7 @@ static int tmpfs_readdir(FAR struct inode *mountpt, /* Have we reached the end of the directory? */ index = dir->u.tmpfs.tf_index; - if (index >= tdo->tdo_nentries) + if (index-- == 0) { /* We signal the end of the directory by returning the special error: * -ENOENT @@ -2059,9 +2059,9 @@ static int tmpfs_readdir(FAR struct inode *mountpt, strncpy(dir->fd_dir.d_name, tde->tde_name, NAME_MAX + 1); - /* Increment the index for next time */ + /* Save the index for next time */ - dir->u.tmpfs.tf_index = index + 1; + dir->u.tmpfs.tf_index = index; ret = OK; } @@ -2076,12 +2076,19 @@ static int tmpfs_readdir(FAR struct inode *mountpt, static int tmpfs_rewinddir(FAR struct inode *mountpt, FAR struct fs_dirent_s *dir) { + FAR struct tmpfs_directory_s *tdo; + finfo("mountpt: %p dir: %p\n", mountpt, dir); DEBUGASSERT(mountpt != NULL && dir != NULL); - /* Set the readdir index to zero */ + /* Get the directory structure from the dir argument and lock it */ - dir->u.tmpfs.tf_index = 0; + tdo = dir->u.tmpfs.tf_tdo; + DEBUGASSERT(tdo != NULL); + + /* Set the readdir index pass the end */ + + dir->u.tmpfs.tf_index = tdo->tdo_nentries; return OK; }