Ignore .name directories and files
authorSmallJoker <mk939@ymail.com>
Sun, 7 Dec 2014 10:14:52 +0000 (11:14 +0100)
committerCraig Robbins <kde.psych@gmail.com>
Tue, 9 Dec 2014 16:49:02 +0000 (02:49 +1000)
Signed-off-by: Craig Robbins <kde.psych@gmail.com>
builtin/mainmenu/modmgr.lua
builtin/mainmenu/tab_texturepacks.lua
src/filesys.cpp

index dcd1eb256e341d87cb267437aed2e7d4d77ff0cc..f2938685eef93c8cd05119c6a1a3f43e6c1334f0 100644 (file)
 
 --------------------------------------------------------------------------------
 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
index 97f96fb1bcd45f3117821b44ab4f882971692021..db5ac3465d5bdee2c280c608c8916c7ff67ccbeb 100644 (file)
@@ -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
index b95986a92bcc9f880a412d1703441ea8549d85b8..4b16d2d3afd5d70836b0ca60fbbe81560c83785a 100644 (file)
@@ -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;
 }