diff --git a/sphaira/source/fs.cpp b/sphaira/source/fs.cpp index 41ef168..774b5c2 100644 --- a/sphaira/source/fs.cpp +++ b/sphaira/source/fs.cpp @@ -688,6 +688,20 @@ Result Dir::GetEntryCount(s64* out) { if (!std::strcmp(d->d_name, ".") || !std::strcmp(d->d_name, "..")) { continue; } + + if (d->d_type == DT_DIR) { + if (!(m_mode & FsDirOpenMode_ReadDirs)) { + continue; + } + } else if (d->d_type == DT_REG) { + if (!(m_mode & FsDirOpenMode_ReadFiles)) { + continue; + } + } else { + log_write("[FS] WARNING: unknown type when counting dir: %u\n", d->d_type); + continue; + } + (*out)++; } diff --git a/sphaira/source/utils/devoptab_bfsar.cpp b/sphaira/source/utils/devoptab_bfsar.cpp index b2b191d..4d379fe 100644 --- a/sphaira/source/utils/devoptab_bfsar.cpp +++ b/sphaira/source/utils/devoptab_bfsar.cpp @@ -215,7 +215,7 @@ int Device::devoptab_dirnext(void* fd, char *filename, struct stat *filestat) { filestat->st_mode = S_IFREG | S_IRUSR | S_IRGRP | S_IROTH; dir->index++; break; - } while (dir->index++); + } while (++dir->index); return 0; } diff --git a/sphaira/source/utils/devoptab_game.cpp b/sphaira/source/utils/devoptab_game.cpp index f1bfdd3..16322a0 100644 --- a/sphaira/source/utils/devoptab_game.cpp +++ b/sphaira/source/utils/devoptab_game.cpp @@ -425,7 +425,7 @@ int Device::devoptab_dirnext(void* fd, char *filename, struct stat *filestat) { std::snprintf(filename, NAME_MAX, "%s", content.nsp->path.s); dir->index++; break; - } while (dir->index++); + } while (++dir->index); } return 0;