From 1d3e221a7a20bfd03517e3ae1e35e4a309a69b6a Mon Sep 17 00:00:00 2001 From: dec05eba Date: Sun, 10 Dec 2017 01:10:48 +0100 Subject: 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 --- src/FileUtil.cpp | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) (limited to 'src/FileUtil.cpp') 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 +#if OS_FAMILY == OS_FAMILY_POSIX +#include +#include +#include +#endif + using namespace std; namespace sibs @@ -18,12 +25,48 @@ 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; tinydir_open(&dir, directory); + while (dir.has_next) + { + tinydir_file file; + 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; @@ -31,7 +74,7 @@ namespace sibs 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 -- cgit v1.2.3