diff options
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 |