From 2d807915e62dad7cfd401c701cb2aabf58d828cf Mon Sep 17 00:00:00 2001 From: d0k3 Date: Tue, 18 Sep 2018 01:30:10 +0200 Subject: [PATCH] SortDirStruct workaround for T_DOTDOT and T_ROOT --- arm9/source/filesys/fsdir.c | 8 +++++--- arm9/source/filesys/fsdrive.c | 4 ++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/arm9/source/filesys/fsdir.c b/arm9/source/filesys/fsdir.c index c7ed354..6fb3952 100644 --- a/arm9/source/filesys/fsdir.c +++ b/arm9/source/filesys/fsdir.c @@ -17,13 +17,15 @@ int compDirEntry(const void* e1, const void* e2) { void SortDirStruct(DirStruct* contents) { qsort(contents->entry, contents->n_entries, sizeof(DirEntry), compDirEntry); + // fix entry->names after qsort for (int i = 0; i < (int)contents->n_entries; i++) { DirEntry* entry = &(contents->entry[i]); - if (entry->type == T_DOTDOT) { - entry->name = entry->path + 8; - } else { + if ((entry->type == T_DIR) || (entry->type == T_FILE)) { char* slash = strrchr(entry->path, '/'); entry->name = slash ? slash + 1 : entry->path; + } else { + // somewhat hacky, applies to T_DOTDOT and T_ROOT (see fsdrive.c) + entry->name = entry->path + 4; } } } diff --git a/arm9/source/filesys/fsdrive.c b/arm9/source/filesys/fsdrive.c index a8fcbfd..29a0ab0 100644 --- a/arm9/source/filesys/fsdrive.c +++ b/arm9/source/filesys/fsdrive.c @@ -179,8 +179,8 @@ void SearchDirContents(DirStruct* contents, const char* path, const char* patter contents->n_entries = 0; // not required, but so what? } else { // create virtual '..' entry - contents->entry->name = contents->entry->path + 8; - strncpy(contents->entry->path, "*?*?*", 8); + contents->entry->name = contents->entry->path + 4; + strncpy(contents->entry->path, "*?*", 4); strncpy(contents->entry->name, "..", 4); contents->entry->type = T_DOTDOT; contents->entry->size = 0;