Codechange: Store info about the dedicated server log file in globals with automatic destruction to simplify control flow in openttd_main.

This commit is contained in:
Michael Lutz
2020-05-17 23:32:10 +02:00
parent 37bc2f8064
commit c972a63c8c
4 changed files with 26 additions and 30 deletions

View File

@@ -8,9 +8,11 @@
/** @file dedicated.cpp Forking support for dedicated servers. */
#include "stdafx.h"
#include "fileio_func.h"
#include <string>
char *_log_file = nullptr; ///< File to reroute output of a forked OpenTTD to
FILE *_log_fd = nullptr; ///< File to reroute output of a forked OpenTTD to
std::string _log_file; ///< File to reroute output of a forked OpenTTD to
std::unique_ptr<FILE, FileDeleter> _log_fd; ///< File to reroute output of a forked OpenTTD to
#if defined(UNIX)
@@ -38,17 +40,17 @@ void DedicatedFork()
case 0: { // We're the child
/* Open the log-file to log all stuff too */
_log_fd = fopen(_log_file, "a");
if (_log_fd == nullptr) {
_log_fd.reset(fopen(_log_file.c_str(), "a"));
if (!_log_fd) {
perror("Unable to open logfile");
exit(1);
}
/* Redirect stdout and stderr to log-file */
if (dup2(fileno(_log_fd), fileno(stdout)) == -1) {
if (dup2(fileno(_log_fd.get()), fileno(stdout)) == -1) {
perror("Rerouting stdout");
exit(1);
}
if (dup2(fileno(_log_fd), fileno(stderr)) == -1) {
if (dup2(fileno(_log_fd.get()), fileno(stderr)) == -1) {
perror("Rerouting stderr");
exit(1);
}