aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSmallJoker <mk939@ymail.com>2014-12-10 02:58:12 +1000
committerCraig Robbins <kde.psych@gmail.com>2014-12-10 02:59:10 +1000
commit2f8fbdb9f52d2118108d69914207766e296d7d37 (patch)
tree918e07aa00e43f8620895ed4be8d636211deea90
parent5229a229a606b25c2f620ba2b276f453ce99df51 (diff)
downloadminetest-2f8fbdb9f52d2118108d69914207766e296d7d37.tar.gz
minetest-2f8fbdb9f52d2118108d69914207766e296d7d37.tar.bz2
minetest-2f8fbdb9f52d2118108d69914207766e296d7d37.zip
Rewrite fs:GetDirListing(file) by kahrl
-rw-r--r--src/filesys.cpp62
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;