diff options
author | SmallJoker <mk939@ymail.com> | 2014-12-10 02:58:12 +1000 |
---|---|---|
committer | Craig Robbins <kde.psych@gmail.com> | 2014-12-10 02:59:10 +1000 |
commit | 2f8fbdb9f52d2118108d69914207766e296d7d37 (patch) | |
tree | 918e07aa00e43f8620895ed4be8d636211deea90 | |
parent | 5229a229a606b25c2f620ba2b276f453ce99df51 (diff) | |
download | minetest-2f8fbdb9f52d2118108d69914207766e296d7d37.tar.gz minetest-2f8fbdb9f52d2118108d69914207766e296d7d37.tar.bz2 minetest-2f8fbdb9f52d2118108d69914207766e296d7d37.zip |
Rewrite fs:GetDirListing(file) by kahrl
-rw-r--r-- | src/filesys.cpp | 62 |
1 files changed, 15 insertions, 47 deletions
diff --git a/src/filesys.cpp b/src/filesys.cpp index 4b16d2d3a..597643887 100644 --- a/src/filesys.cpp +++ b/src/filesys.cpp @@ -34,11 +34,6 @@ namespace fs #define _WIN32_WINNT 0x0501 #include <windows.h> -#include <malloc.h> -#include <tchar.h> -#include <wchar.h> - -#define BUFSIZE MAX_PATH std::vector<DirListNode> GetDirListing(std::string pathstring) { @@ -47,34 +42,18 @@ std::vector<DirListNode> GetDirListing(std::string pathstring) WIN32_FIND_DATA FindFileData; HANDLE hFind = INVALID_HANDLE_VALUE; DWORD dwError; - LPTSTR DirSpec; - INT retval; - - DirSpec = (LPTSTR) malloc (BUFSIZE); - - if(DirSpec == NULL) { - errorstream<<"GetDirListing: Insufficient memory available"<<std::endl; - retval = 1; - goto Cleanup; - } - - // Check that the input is not larger than allowed. - if (pathstring.size() > (BUFSIZE - 2)) { - errorstream<<"GetDirListing: Input directory is too large."<<std::endl; - retval = 3; - goto Cleanup; - } - - //_tprintf (TEXT("Target directory is %s.\n"), pathstring.c_str()); - - sprintf(DirSpec, "%s", (pathstring + "\\*").c_str()); + std::string dirSpec = pathstring + "\\*"; + // Find the first file in the directory. - hFind = FindFirstFile(DirSpec, &FindFileData); + hFind = FindFirstFile(dirSpec.c_str(), &FindFileData); if (hFind == INVALID_HANDLE_VALUE) { - retval = (-1); - goto Cleanup; + dwError = GetLastError(); + if (dwError != ERROR_FILE_NOT_FOUND && dwError != ERROR_PATH_NOT_FOUND) { + errorstream << "GetDirListing: FindFirstFile error." + << " Error is " << dwError << std::endl; + } } else { // NOTE: // Be very sure to not include '..' in the results, it will @@ -83,7 +62,7 @@ std::vector<DirListNode> GetDirListing(std::string pathstring) DirListNode node; node.name = FindFileData.cFileName; node.dir = FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY; - if(node.name != "." && node.name != "..") + if (node.name != "." && node.name != "..") listing.push_back(node); // List all the other files in the directory. @@ -98,23 +77,12 @@ std::vector<DirListNode> GetDirListing(std::string pathstring) dwError = GetLastError(); FindClose(hFind); if (dwError != ERROR_NO_MORE_FILES) { - errorstream<<"GetDirListing: FindNextFile error. Error is " - <<dwError<<std::endl; - retval = (-1); - goto Cleanup; - } + errorstream << "GetDirListing: FindNextFile error." + << " Error is " << dwError << std::endl; + listing.clear(); + return listing; + } } - retval = 0; - -Cleanup: - free(DirSpec); - - if(retval != 0) listing.clear(); - - //for(unsigned int i=0; i<listing.size(); i++){ - // infostream<<listing[i].name<<(listing[i].dir?" (dir)":" (file)")<<std::endl; - //} - return listing; } @@ -246,7 +214,7 @@ std::vector<DirListNode> GetDirListing(std::string pathstring) // NOTE: // Be very sure to not include '..' in the results, it will // result in an epic failure when deleting stuff. - if(dirp->d_name == "." || dirp->d_name == "..") + if(strcmp(dirp->d_name, ".") == 0 || strcmp(dirp->d_name, "..") == 0) continue; DirListNode node; |