From 5229a229a606b25c2f620ba2b276f453ce99df51 Mon Sep 17 00:00:00 2001 From: SmallJoker Date: Sun, 7 Dec 2014 11:14:52 +0100 Subject: Ignore .name directories and files Signed-off-by: Craig Robbins --- src/filesys.cpp | 101 ++++++++++++++++++++++++++------------------------------ 1 file changed, 46 insertions(+), 55 deletions(-) (limited to 'src') diff --git a/src/filesys.cpp b/src/filesys.cpp index b95986a92..4b16d2d3a 100644 --- a/src/filesys.cpp +++ b/src/filesys.cpp @@ -52,19 +52,17 @@ std::vector GetDirListing(std::string pathstring) DirSpec = (LPTSTR) malloc (BUFSIZE); - if( DirSpec == NULL ) - { - errorstream<<"GetDirListing: Insufficient memory available"< (BUFSIZE - 2)) - { - errorstream<<"GetDirListing: Input directory is too large."< (BUFSIZE - 2)) { + errorstream<<"GetDirListing: Input directory is too large."< GetDirListing(std::string pathstring) // Find the first file in the directory. hFind = FindFirstFile(DirSpec, &FindFileData); - if (hFind == INVALID_HANDLE_VALUE) - { + if (hFind == INVALID_HANDLE_VALUE) { retval = (-1); goto Cleanup; - } - else - { + } else { // NOTE: // Be very sure to not include '..' in the results, it will // result in an epic failure when deleting stuff. @@ -92,8 +87,7 @@ std::vector GetDirListing(std::string pathstring) listing.push_back(node); // List all the other files in the directory. - while (FindNextFile(hFind, &FindFileData) != 0) - { + while (FindNextFile(hFind, &FindFileData) != 0) { DirListNode node; node.name = FindFileData.cFileName; node.dir = FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY; @@ -103,15 +97,14 @@ std::vector GetDirListing(std::string pathstring) dwError = GetLastError(); FindClose(hFind); - if (dwError != ERROR_NO_MORE_FILES) - { + if (dwError != ERROR_NO_MORE_FILES) { errorstream<<"GetDirListing: FindNextFile error. Error is " < GetDirListing(std::string pathstring) { std::vector listing; - DIR *dp; - struct dirent *dirp; - if((dp = opendir(pathstring.c_str())) == NULL) { + DIR *dp; + struct dirent *dirp; + if((dp = opendir(pathstring.c_str())) == NULL) { //infostream<<"Error("<d_name[0]!='.'){ - DirListNode node; - node.name = dirp->d_name; - if(node.name == "." || node.name == "..") - continue; + if(dirp->d_name == "." || dirp->d_name == "..") + continue; + + DirListNode node; + node.name = dirp->d_name; - int isdir = -1; // -1 means unknown + int isdir = -1; // -1 means unknown - /* - POSIX doesn't define d_type member of struct dirent and - certain filesystems on glibc/Linux will only return - DT_UNKNOWN for the d_type member. + /* + POSIX doesn't define d_type member of struct dirent and + certain filesystems on glibc/Linux will only return + DT_UNKNOWN for the d_type member. - Also we don't know whether symlinks are directories or not. - */ + Also we don't know whether symlinks are directories or not. + */ #ifdef _DIRENT_HAVE_D_TYPE - if(dirp->d_type != DT_UNKNOWN && dirp->d_type != DT_LNK) - isdir = (dirp->d_type == DT_DIR); + if(dirp->d_type != DT_UNKNOWN && dirp->d_type != DT_LNK) + isdir = (dirp->d_type == DT_DIR); #endif /* _DIRENT_HAVE_D_TYPE */ - /* - Was d_type DT_UNKNOWN, DT_LNK or nonexistent? - If so, try stat(). - */ - if(isdir == -1) - { - struct stat statbuf; - if (stat((pathstring + "/" + node.name).c_str(), &statbuf)) - continue; - isdir = ((statbuf.st_mode & S_IFDIR) == S_IFDIR); - } - node.dir = isdir; - listing.push_back(node); + /* + Was d_type DT_UNKNOWN, DT_LNK or nonexistent? + If so, try stat(). + */ + if(isdir == -1) { + struct stat statbuf; + if (stat((pathstring + "/" + node.name).c_str(), &statbuf)) + continue; + isdir = ((statbuf.st_mode & S_IFDIR) == S_IFDIR); } - } - closedir(dp); + node.dir = isdir; + listing.push_back(node); + } + closedir(dp); return listing; } -- cgit v1.2.3