diff options
author | SmallJoker <mk939@ymail.com> | 2014-12-07 11:14:52 +0100 |
---|---|---|
committer | Craig Robbins <kde.psych@gmail.com> | 2014-12-10 02:49:02 +1000 |
commit | 5229a229a606b25c2f620ba2b276f453ce99df51 (patch) | |
tree | 1df1b5bf7004ec085a776162989d0e0067722654 | |
parent | c5f6f9f77ac1df4b223649fcaca9a66333aa8786 (diff) | |
download | minetest-5229a229a606b25c2f620ba2b276f453ce99df51.tar.gz minetest-5229a229a606b25c2f620ba2b276f453ce99df51.tar.bz2 minetest-5229a229a606b25c2f620ba2b276f453ce99df51.zip |
Ignore .name directories and files
Signed-off-by: Craig Robbins <kde.psych@gmail.com>
-rw-r--r-- | builtin/mainmenu/modmgr.lua | 48 | ||||
-rw-r--r-- | builtin/mainmenu/tab_texturepacks.lua | 10 | ||||
-rw-r--r-- | src/filesys.cpp | 101 |
3 files changed, 77 insertions, 82 deletions
diff --git a/builtin/mainmenu/modmgr.lua b/builtin/mainmenu/modmgr.lua index dcd1eb256..f2938685e 100644 --- a/builtin/mainmenu/modmgr.lua +++ b/builtin/mainmenu/modmgr.lua @@ -17,30 +17,32 @@ -------------------------------------------------------------------------------- function get_mods(path,retval,modpack) + local mods = core.get_dirlist(path, true) + + for i=1, #mods, 1 do + if mods[i]:sub(1,1) ~= "." then + local toadd = {} + local modpackfile = nil + + toadd.name = mods[i] + toadd.path = path .. DIR_DELIM .. mods[i] .. DIR_DELIM + if modpack ~= nil and + modpack ~= "" then + toadd.modpack = modpack + else + local filename = path .. DIR_DELIM .. mods[i] .. DIR_DELIM .. "modpack.txt" + local error = nil + modpackfile,error = io.open(filename,"r") + end - local mods = core.get_dirlist(path,true) - for i=1,#mods,1 do - local toadd = {} - local modpackfile = nil - - toadd.name = mods[i] - toadd.path = path .. DIR_DELIM .. mods[i] .. DIR_DELIM - if modpack ~= nil and - modpack ~= "" then - toadd.modpack = modpack - else - local filename = path .. DIR_DELIM .. mods[i] .. DIR_DELIM .. "modpack.txt" - local error = nil - modpackfile,error = io.open(filename,"r") - end - - if modpackfile ~= nil then - modpackfile:close() - toadd.is_modpack = true - table.insert(retval,toadd) - get_mods(path .. DIR_DELIM .. mods[i],retval,mods[i]) - else - table.insert(retval,toadd) + if modpackfile ~= nil then + modpackfile:close() + toadd.is_modpack = true + table.insert(retval,toadd) + get_mods(path .. DIR_DELIM .. mods[i],retval,mods[i]) + else + table.insert(retval,toadd) + end end end end diff --git a/builtin/mainmenu/tab_texturepacks.lua b/builtin/mainmenu/tab_texturepacks.lua index 97f96fb1b..db5ac3465 100644 --- a/builtin/mainmenu/tab_texturepacks.lua +++ b/builtin/mainmenu/tab_texturepacks.lua @@ -31,11 +31,13 @@ local function render_texture_pack_list(list) local retval = "" for i, v in ipairs(list) do - if retval ~= "" then - retval = retval .."," - end + if v:sub(1,1) ~= "." then + if retval ~= "" then + retval = retval .."," + end - retval = retval .. core.formspec_escape(v) + retval = retval .. core.formspec_escape(v) + end end return retval 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<DirListNode> GetDirListing(std::string pathstring) DirSpec = (LPTSTR) malloc (BUFSIZE); - if( DirSpec == NULL ) - { - errorstream<<"GetDirListing: Insufficient memory available"<<std::endl; - retval = 1; - goto Cleanup; + 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; + 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()); @@ -74,13 +72,10 @@ std::vector<DirListNode> 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<DirListNode> 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<DirListNode> 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 " <<dwError<<std::endl; retval = (-1); goto Cleanup; } } - retval = 0; + retval = 0; Cleanup: free(DirSpec); @@ -242,53 +235,51 @@ std::vector<DirListNode> GetDirListing(std::string pathstring) { std::vector<DirListNode> 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("<<errno<<") opening "<<pathstring<<std::endl; - return listing; - } + return listing; + } - while ((dirp = readdir(dp)) != NULL) { + while ((dirp = readdir(dp)) != NULL) { // NOTE: // Be very sure to not include '..' in the results, it will // result in an epic failure when deleting stuff. - if(dirp->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; } |