diff --git a/arm9/source/file_browse.cpp b/arm9/source/file_browse.cpp index 7b5e3be..84458fb 100644 --- a/arm9/source/file_browse.cpp +++ b/arm9/source/file_browse.cpp @@ -72,6 +72,7 @@ bool dirEntryPredicate (const DirEntry& lhs, const DirEntry& rhs) { } void getDirectoryContents (vector& dirContents) { + bool twoDotsMade = false; struct stat st; dirContents.clear(); @@ -87,24 +88,34 @@ void getDirectoryContents (vector& dirContents) { struct dirent* pent = readdir(pdir); if(pent == NULL) break; - + stat(pent->d_name, &st); - dirEntry.name = pent->d_name; - dirEntry.isDirectory = (st.st_mode & S_IFDIR) ? true : false; - if((dirEntry.name.substr(dirEntry.name.find_last_of(".") + 1) == "nds") - || (dirEntry.name.substr(dirEntry.name.find_last_of(".") + 1) == "NDS") - || (dirEntry.name.substr(dirEntry.name.find_last_of(".") + 1) == "argv") - || (dirEntry.name.substr(dirEntry.name.find_last_of(".") + 1) == "ARGV") - || (isDSiMode() && is3DS && sdMounted && dirEntry.name.substr(dirEntry.name.find_last_of(".") + 1) == "firm") - || (isDSiMode() && is3DS && sdMounted && dirEntry.name.substr(dirEntry.name.find_last_of(".") + 1) == "FIRM")) - { - dirEntry.isApp = true; - } else { - dirEntry.isApp = false; - } - - if (dirEntry.name.compare(".") != 0 && (dirEntry.isDirectory || nameEndsWith(dirEntry.name))) { - dirContents.push_back (dirEntry); + if (!twoDotsMade) { + if (strcmp(pent->d_name, "..") != 0) { + dirEntry.name = ".."; + dirEntry.isDirectory = true; + dirEntry.isApp = false; + dirContents.push_back (dirEntry); // List ".." + } + twoDotsMade = true; + } else if (strcmp(pent->d_name, "..") != 0) { + dirEntry.name = pent->d_name; + dirEntry.isDirectory = (st.st_mode & S_IFDIR) ? true : false; + if((dirEntry.name.substr(dirEntry.name.find_last_of(".") + 1) == "nds") + || (dirEntry.name.substr(dirEntry.name.find_last_of(".") + 1) == "NDS") + || (dirEntry.name.substr(dirEntry.name.find_last_of(".") + 1) == "argv") + || (dirEntry.name.substr(dirEntry.name.find_last_of(".") + 1) == "ARGV") + || (isDSiMode() && is3DS && sdMounted && dirEntry.name.substr(dirEntry.name.find_last_of(".") + 1) == "firm") + || (isDSiMode() && is3DS && sdMounted && dirEntry.name.substr(dirEntry.name.find_last_of(".") + 1) == "FIRM")) + { + dirEntry.isApp = true; + } else { + dirEntry.isApp = false; + } + + if (dirEntry.name.compare(".") != 0 && (dirEntry.isDirectory || nameEndsWith(dirEntry.name))) { + dirContents.push_back (dirEntry); + } } } diff --git a/arm9/source/main.cpp b/arm9/source/main.cpp index 042aaa4..4658629 100644 --- a/arm9/source/main.cpp +++ b/arm9/source/main.cpp @@ -75,7 +75,7 @@ int main(int argc, char **argv) { bool yHeld = false; - snprintf(titleName, sizeof(titleName), "GodMode9i v%i.%i.%i", 1, 2, 1); + snprintf(titleName, sizeof(titleName), "GodMode9i v%i.%i.%i", 1, 3, 0); // initialize video mode videoSetMode(MODE_4_2D);