summaryrefslogtreecommitdiff
path: root/node/Utils.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'node/Utils.cpp')
-rw-r--r--node/Utils.cpp23
1 files changed, 23 insertions, 0 deletions
diff --git a/node/Utils.cpp b/node/Utils.cpp
index b1912198..e1dbedaa 100644
--- a/node/Utils.cpp
+++ b/node/Utils.cpp
@@ -38,6 +38,7 @@
#include <errno.h>
#include <fcntl.h>
#include <sys/types.h>
+#include <sys/stat.h>
#include <sys/uio.h>
#include <dirent.h>
#endif
@@ -50,6 +51,28 @@ namespace ZeroTier {
const char Utils::HEXCHARS[16] = { '0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f' };
+bool Utils::redirectUnixOutputs(const char *stdoutPath,const char *stderrPath)
+ throw()
+{
+ int fdout = ::open(stdoutPath,O_WRONLY|O_CREAT);
+ if (fdout > 0) {
+ int fderr;
+ if (stderrPath) {
+ fderr = ::open(stderrPath,O_WRONLY|O_CREAT);
+ if (fderr <= 0) {
+ ::close(fdout);
+ return false;
+ }
+ } else fderr = fdout;
+ ::close(STDOUT_FILENO);
+ ::close(STDERR_FILENO);
+ ::dup2(fdout,STDOUT_FILENO);
+ ::dup2(fderr,STDERR_FILENO);
+ return true;
+ }
+ return false;
+}
+
std::map<std::string,bool> Utils::listDirectory(const char *path)
{
std::map<std::string,bool> r;