diff options
author | dec05eba <dec05eba@protonmail.com> | 2017-12-10 01:10:48 +0100 |
---|---|---|
committer | dec05eba <dec05eba@protonmail.com> | 2017-12-10 01:12:08 +0100 |
commit | 1d3e221a7a20bfd03517e3ae1e35e4a309a69b6a (patch) | |
tree | fdb38039d12cf38e9ac6102118727b78437cf3db /src/FileUtil.cpp | |
parent | 2ed7d0b09caa872e44e2eb09b09b2387e93f9b34 (diff) |
Add support for dependencies in global lib dir
Global lib dir is located at ~/.sibs/lib
TODO: If global lib dir doesn't exist, download it from github/server
Diffstat (limited to 'src/FileUtil.cpp')
-rw-r--r-- | src/FileUtil.cpp | 56 |
1 files changed, 55 insertions, 1 deletions
diff --git a/src/FileUtil.cpp b/src/FileUtil.cpp index 59132dc..400b439 100644 --- a/src/FileUtil.cpp +++ b/src/FileUtil.cpp @@ -1,6 +1,13 @@ #include "../include/FileUtil.hpp" +#include "../include/env.hpp" #include <cstdio> +#if OS_FAMILY == OS_FAMILY_POSIX +#include <unistd.h> +#include <sys/types.h> +#include <pwd.h> +#endif + using namespace std; namespace sibs @@ -19,6 +26,24 @@ namespace sibs } // TODO: Handle failure (directory doesn't exist, no permission etc) + void walkDir(const char *directory, FileWalkCallbackFunc callbackFunc) + { + tinydir_dir dir; + tinydir_open(&dir, directory); + + while (dir.has_next) + { + tinydir_file file; + tinydir_readfile(&dir, &file); + if(_tinydir_strcmp(file.name, ".") != 0 && _tinydir_strcmp(file.name, "..") != 0) + callbackFunc(&file); + tinydir_next(&dir); + } + + tinydir_close(&dir); + } + + // TODO: Handle failure (directory doesn't exist, no permission etc) void walkDirFiles(const char *directory, FileWalkCallbackFunc callbackFunc) { tinydir_dir dir; @@ -30,8 +55,26 @@ namespace sibs tinydir_readfile(&dir, &file); if(file.is_reg) callbackFunc(&file); + tinydir_next(&dir); + } + + tinydir_close(&dir); + } + + // TODO: Handle failure (directory doesn't exist, no permission etc) + void walkDirFilesRecursive(const char *directory, FileWalkCallbackFunc callbackFunc) + { + tinydir_dir dir; + tinydir_open(&dir, directory); + + while (dir.has_next) + { + tinydir_file file; + tinydir_readfile(&dir, &file); + if(file.is_reg) + callbackFunc(&file); else if(_tinydir_strcmp(file.name, ".") != 0 && _tinydir_strcmp(file.name, "..") != 0) - walkDirFiles(file.path, callbackFunc); + walkDirFilesRecursive(file.path, callbackFunc); tinydir_next(&dir); } @@ -77,4 +120,15 @@ namespace sibs fclose(file); return true; } + + const char* getHomeDir() + { + const char *homeDir = getenv("HOME"); + if(!homeDir) + { + passwd *pw = getpwuid(getuid()); + homeDir = pw->pw_dir; + } + return homeDir; + } }
\ No newline at end of file |