daemon: Fix log reload for relative paths.
[paraslash.git] / daemon.c
index 49d2e1007fcf92c99c511fbcadbe0f461a05638d..ddfe680cebc63dc1c7af89fde333c665873765eb 100644 (file)
--- a/daemon.c
+++ b/daemon.c
@@ -30,6 +30,7 @@ struct daemon {
        char *hostname;
        /** Used for colored log messages. */
        char log_colors[NUM_LOGLEVELS][COLOR_MAXLEN];
+       char *old_cwd;
 };
 
 static struct daemon the_daemon, *me = &the_daemon;
@@ -117,7 +118,12 @@ void daemon_set_logfile(const char *logfile_name)
 {
        free(me->logfile_name);
        me->logfile_name = NULL;
-       if (logfile_name)
+       if (!logfile_name)
+               return;
+       if (me->old_cwd && logfile_name[0] != '/')
+               me->logfile_name = make_message("%s/%s", me->old_cwd,
+                       logfile_name);
+       else
                me->logfile_name = para_strdup(logfile_name);
 }
 
@@ -197,6 +203,7 @@ int daemonize(bool parent_waits)
        /* become session leader */
        if (setsid() < 0)
                goto err;
+       me->old_cwd = getcwd(NULL, 0);
        if (chdir("/") < 0)
                goto err;
        null = open("/dev/null", O_RDWR);