From c722973212547aa812cd818279e3fb989fb38dd4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tim=20R=C3=BChsen?= <tim.ruehsen@gmx.de>
Date: Wed, 7 Feb 2018 22:33:06 +0100
Subject: [PATCH] Fix logging in background mode
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* ../src/main.c: Re-init logfile if changed for background mode
* ../src/utils.c: fork_to_background() returns whether logfile changed
* ../src/utils.h: Set return type bool for fork_to_background()

Fixes: #53020
Reported-by: Noël Köthe
---
 src/main.c  | 7 ++++++-
 src/utils.c | 4 +++-
 src/utils.h | 2 +-
 3 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/src/main.c b/src/main.c
index 0ffd551a..5430e7ce 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1880,7 +1880,12 @@ for details.\n\n"));
   sock_init();
 #else
   if (opt.background)
-    fork_to_background ();
+    {
+      bool logfile_changed = fork_to_background ();
+
+      if (logfile_changed)
+        log_init (opt.lfilename, append_to_log);
+    }
 #endif
 
   /* Initialize progress.  Have to do this after the options are
diff --git a/src/utils.c b/src/utils.c
index 6f41fabe..2d265c11 100644
--- a/src/utils.c
+++ b/src/utils.c
@@ -469,7 +469,7 @@ fork_to_background (void)
 #else /* def __VMS */
 
 #if !defined(WINDOWS) && !defined(MSDOS)
-void
+bool
 fork_to_background (void)
 {
   pid_t pid;
@@ -514,6 +514,8 @@ fork_to_background (void)
     DEBUGP (("Failed to redirect stdout to /dev/null.\n"));
   if (freopen ("/dev/null", "w", stderr) == NULL)
     DEBUGP (("Failed to redirect stderr to /dev/null.\n"));
+
+  return logfile_changed;
 }
 #endif /* !WINDOWS && !MSDOS */
 
diff --git a/src/utils.h b/src/utils.h
index 66838f2c..26e2c28c 100644
--- a/src/utils.h
+++ b/src/utils.h
@@ -71,7 +71,7 @@ char *xstrdup_lower (const char *);
 char *strdupdelim (const char *, const char *);
 char **sepstring (const char *);
 bool subdir_p (const char *, const char *);
-void fork_to_background (void);
+bool fork_to_background (void);
 
 char *aprintf (const char *, ...) GCC_FORMAT_ATTR (1, 2);
 char *concat_strings (const char *, ...);