diff --git a/qse/include/qse/si/AppRoot.hpp b/qse/include/qse/si/AppRoot.hpp index 4551f095..368c7d6f 100644 --- a/qse/include/qse/si/AppRoot.hpp +++ b/qse/include/qse/si/AppRoot.hpp @@ -42,6 +42,9 @@ public: int daemonize (bool chdir_to_root = true, int fork_count = 1) QSE_CPP_NOEXCEPT; + int chroot (const qse_wchar_t* wpath) QSE_CPP_NOEXCEPT; + int chroot (const qse_mchar_t* mpath) QSE_CPP_NOEXCEPT; + protected: bool _root_only; diff --git a/qse/lib/si/AppRoot.cpp b/qse/lib/si/AppRoot.cpp index 1daa1896..9ece85c7 100644 --- a/qse/lib/si/AppRoot.cpp +++ b/qse/lib/si/AppRoot.cpp @@ -49,14 +49,7 @@ int AppRoot::daemonize (bool chdir_to_root, int fork_count) QSE_CPP_NOEXCEPT } int n = QSE_FORK(); - if (n == -1) - { - //throw DaemonError ("can't xp_fork"); - //if (err_code) *err_code = ERR_FORK; - return -1; - } - - // the parent exits + if (n == -1) return -1; if (n != 0) QSE_EXIT(0); // TODO: should i call exit() in stdlib.h? } @@ -128,6 +121,16 @@ int AppRoot::switchUser () QSE_CPP_NOEXCEPT } #endif + +int AppRoot::chroot (const qse_mchar_t* mpath) QSE_CPP_NOEXCEPT +{ + QSE_CHROOT (mpath); +} + +int AppRoot::chroot (const qse_wchar_t* mpath) QSE_CPP_NOEXCEPT +{ +} + void AppRoot::on_signal () QSE_CPP_NOEXCEPT { } diff --git a/qse/lib/si/log.c b/qse/lib/si/log.c index d9472baf..90dadb89 100644 --- a/qse/lib/si/log.c +++ b/qse/lib/si/log.c @@ -229,7 +229,7 @@ int qse_log_init (qse_log_t* log, qse_mmgr_t* mmgr, const qse_char_t* ident, int log->t.syslog_remote.sock = -1; if (potflags & QSE_LOG_FILE) log->flags |= QSE_LOG_FILE; - if (target->file) + if (target && target->file) { if (qse_strlen(target->file) >= QSE_COUNTOF(log->t.file.pathbuf)) { @@ -247,7 +247,7 @@ int qse_log_init (qse_log_t* log, qse_mmgr_t* mmgr, const qse_char_t* ident, int if (potflags & QSE_LOG_SYSLOG) log->flags |= QSE_LOG_SYSLOG; if (potflags & QSE_LOG_SYSLOG_REMOTE) log->flags |= QSE_LOG_SYSLOG_REMOTE; - if (qse_skadfamily(&target->syslog_remote) >= 0) log->t.syslog_remote.addr = target->syslog_remote; + if (target && qse_skadfamily(&target->syslog_remote) >= 0) log->t.syslog_remote.addr = target->syslog_remote; if (ident) qse_strxcpy (log->ident, QSE_COUNTOF(log->ident), ident); if (qse_mtx_init(&log->mtx, mmgr) <= -1) @@ -381,7 +381,7 @@ int qse_log_settarget (qse_log_t* log, int flags, const qse_log_target_t* target /* If you just want to set the target file path without enable QSE_LOG_FILE, * just set target->file without QSE_LOG_FILE in the flags. * later, you can call this function with QSE_LOG_FILE set but with target->file or QSE_NULL */ - if (target->file) + if (target && target->file) { if (log->t.file.path && log->t.file.path != log->t.file.pathbuf) QSE_MMGR_FREE (log->mmgr, log->t.file.path); @@ -400,7 +400,7 @@ int qse_log_settarget (qse_log_t* log, int flags, const qse_log_target_t* target if (flags & QSE_LOG_SYSLOG) log->flags |= QSE_LOG_SYSLOG; if (flags & QSE_LOG_SYSLOG_REMOTE) log->flags |= QSE_LOG_SYSLOG_REMOTE; - if (qse_skadfamily(&target->syslog_remote) >= 0) log->t.syslog_remote.addr = target->syslog_remote; + if (target && qse_skadfamily(&target->syslog_remote) >= 0) log->t.syslog_remote.addr = target->syslog_remote; return 0; }