X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Utils%2FDaemon%2FDaemon.cc;h=1b6e8ae9a62817b28f81fc36a462ebb24c579745;hb=5443435c4c2b6e4386c5334b5b8358273f2bae93;hp=2326897eceeff7742de7c19742fb96e3f784635e;hpb=2da517bbcdb2af10d2322fc762ca27774b53b435;p=senf.git diff --git a/Utils/Daemon/Daemon.cc b/Utils/Daemon/Daemon.cc index 2326897..1b6e8ae 100644 --- a/Utils/Daemon/Daemon.cc +++ b/Utils/Daemon/Daemon.cc @@ -31,6 +31,7 @@ #include #include #include +#include #include #include #include @@ -88,7 +89,7 @@ prefix_ int senf::Daemon::argc() return argc_; } -prefix_ char ** senf::Daemon::argv() +prefix_ char const ** senf::Daemon::argv() { return argv_; } @@ -106,7 +107,7 @@ namespace { 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_; } @@ -131,14 +132,19 @@ prefix_ void senf::Daemon::openLog() << " Could not open \"" << stdoutLog_ << "\" for redirecting stdout."; stdout_ = fd; } - if (stderrLog_ == stdoutLog_) - stderr_ = fd; - else if (! stderrLog_.empty()) { - fd = ::open(stdoutLog_.c_str(), O_WRONLY | O_APPEND | O_CREAT, 0666); - if (fd < 0) - SENF_THROW_SYSTEM_EXCEPTION("") - << " Could not open \"" << stderrLog_ << "\" for redirecting stderr."; - stderr_ = fd; + if (! stderrLog_.empty()) { + if (stderrLog_ == stdoutLog_) { + stderr_ = ::dup(fd); + if (stderr_ < 0) + SENF_THROW_SYSTEM_EXCEPTION("::dup()"); + } + else { + fd = ::open(stdoutLog_.c_str(), O_WRONLY | O_APPEND | O_CREAT, 0666); + if (fd < 0) + SENF_THROW_SYSTEM_EXCEPTION("") + << " Could not open \"" << stderrLog_ << "\" for redirecting stderr."; + stderr_ = fd; + } } } @@ -237,7 +243,7 @@ prefix_ void senf::Daemon::exit(unsigned code) 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; @@ -306,6 +312,7 @@ senf::Daemon * senf::Daemon::instance_ (0); prefix_ void senf::Daemon::configure() { + // int i (not unsigned) since argc_ is int ... for (int i (1); i