]> git.tdb.fi Git - libs/core.git/blobdiff - source/fs/unix/dir.cpp
Add platform-specific implemenrations of FS::list_filtered
[libs/core.git] / source / fs / unix / dir.cpp
index 0dc950bf00da0b8ff82b5e26e25346be3170be41..a13cbbbffe22b63bbe47efd22f67112fae4f7def 100644 (file)
@@ -1,6 +1,8 @@
 #include <unistd.h>
+#include <dirent.h>
 #include <sys/stat.h>
 #include <msp/core/systemerror.h>
+#include <msp/strings/regex.h>
 #include "dir.h"
 
 using namespace std;
@@ -20,6 +22,28 @@ void rmdir(const Path &path)
                throw system_error("rmdir");
 }
 
+vector<string> list_filtered(const Path &path, const string &filter)
+{
+       Regex r_filter(filter);
+
+       vector<string> result;
+       DIR *dir = opendir(path.str().c_str());
+       if(!dir)
+               throw system_error("opendir");
+
+       while(dirent *de = readdir(dir))
+       {
+               const char *fn = de->d_name;
+               if(fn[0]=='.' && (fn[1]==0 || (fn[1]=='.' && fn[2]==0)))
+                       continue;
+               if(r_filter.match(fn))
+                       result.push_back(fn);
+       }
+       closedir(dir);
+
+       return result;
+}
+
 Path getcwd()
 {
        char buf[1024];