]> git.tdb.fi Git - libs/core.git/blobdiff - source/fs/dir.cpp
Add move semantics to Variant
[libs/core.git] / source / fs / dir.cpp
index 098020328342db2edf93d4b2b425555405ab5f00..0f617e58717b984db918eb51e714a8534c01a410 100644 (file)
@@ -1,9 +1,6 @@
-#include <cstdlib>
-#include <unistd.h>
-#include <dirent.h>
 #include <msp/core/application.h>
-#include <msp/core/systemerror.h>
-#include <msp/strings/regex.h>
+#include <msp/core/environ.h>
+#include <msp/core/except.h>
 #include <msp/strings/utils.h>
 #include "dir.h"
 #include "path.h"
@@ -38,7 +35,9 @@ const Path &get_bin_dir(const string &argv0)
        {
                Path exe;
                if(argv0.find(DIRSEP)==string::npos)
-                       if(const char *path = getenv("PATH"))
+               {
+                       string path = getenv("PATH");
+                       if(!path.empty())
                        {
                                for(const string &d: split(path, ITEMSEP))
                                        if(exists(Path(d)/argv0))
@@ -47,6 +46,7 @@ const Path &get_bin_dir(const string &argv0)
                                                break;
                                        }
                        }
+               }
 
                if(exe.empty())
                        exe = realpath(argv0);
@@ -106,33 +106,11 @@ vector<string> list_files(const Path &path)
        return list_filtered(path, string());
 }
 
-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 get_sys_conf_dir()
 {
        const char *argv0 = Application::get_argv0();
        if(!argv0)
-               throw logic_error("no startup command");
+               throw invalid_state("no startup command");
 
        Path dir = get_bin_dir(argv0);
 
@@ -151,7 +129,7 @@ Path get_sys_data_dir()
 {
        const char *argv0 = Application::get_argv0();
        if(!argv0)
-               throw logic_error("no startup command");
+               throw invalid_state("no startup command");
 
        Path dir = get_bin_dir(argv0);
 
@@ -167,7 +145,7 @@ Path get_sys_lib_dir()
 {
        const char *argv0 = Application::get_argv0();
        if(!argv0)
-               throw logic_error("no startup command");
+               throw invalid_state("no startup command");
 
        Path dir = get_bin_dir(argv0);
 
@@ -191,7 +169,7 @@ Path path_lookup(const string &name, const vector<Path> &paths)
 
 Path path_lookup(const string &name)
 {
-       const char *path = getenv("PATH");
+       string path = getenv("PATH");
        vector<string> dirs = split(path, ITEMSEP);
        return path_lookup(name, vector<Path>(dirs.begin(), dirs.end()));
 }