#include <sys/stat.h>
#include <sys/wait.h>
#include <unistd.h>
+#include <limits.h>
#include <fcntl.h>
#include <errno.h>
#include <signal.h>
return argc_;
}
-prefix_ char ** senf::Daemon::argv()
+prefix_ char const ** senf::Daemon::argv()
{
return argv_;
}
prefix_ void senf::Daemon::removeDaemonArgs()
{
- char ** last (std::remove_if(argv_+1, argv_+argc_, IsDaemonOpt()));
+ char const ** last (std::remove_if(argv_+1, argv_+argc_, IsDaemonOpt()));
*last = 0;
argc_ = last - argv_;
}
<< " Could not open \"" << stdoutLog_ << "\" for redirecting stdout.";
stdout_ = fd;
}
- if (stderrLog_ == stdoutLog_)
- stderr_ = fd;
+ if (stderrLog_ == stdoutLog_) {
+ stderr_ = ::dup(fd);
+ if (stderr_ < 0)
+ SENF_THROW_SYSTEM_EXCEPTION("::dup()");
+ }
else if (! stderrLog_.empty()) {
fd = ::open(stdoutLog_.c_str(), O_WRONLY | O_APPEND | O_CREAT, 0666);
if (fd < 0)
throw DaemonExitException(code);
}
-prefix_ int senf::Daemon::start(int argc, char ** argv)
+prefix_ int senf::Daemon::start(int argc, char const ** argv)
{
argc_ = argc;
argv_ = argv;
prefix_ void senf::Daemon::configure()
{
+ // int i (not unsigned) since argc_ is int ...
for (int i (1); i<argc_; ++i) {
if (argv_[i] == std::string("--no-daemon"))
daemonize(false);