aboutsummaryrefslogtreecommitdiff
path: root/src/FileUtil.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/FileUtil.cpp')
-rw-r--r--src/FileUtil.cpp56
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