From 771e34f19925fd5153c066c687f988d0f35912c1 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sat, 16 Apr 2022 21:27:11 -0500 Subject: [PATCH] Revert "Don't crash if the log file can't be opened" We don't have a stdout to _dup2() into when run as a service. This reverts commit e9ddf91157a8903128d3030acd9985eb3c98a755. --- miss/miss.cpp | 24 +++++------------------- 1 file changed, 5 insertions(+), 19 deletions(-) diff --git a/miss/miss.cpp b/miss/miss.cpp index 5014268..0480240 100644 --- a/miss/miss.cpp +++ b/miss/miss.cpp @@ -11,8 +11,6 @@ #include #include #include -#include -#include #include "relay.h" #include "..\version.h" @@ -836,27 +834,15 @@ void ResetLogFile(bool standaloneExe) ExpandEnvironmentStringsA("%ProgramData%\\MISS\\miss-old.log", oldLogFilePath, sizeof(oldLogFilePath)); ExpandEnvironmentStringsA("%ProgramData%\\MISS\\miss-current.log", currentLogFilePath, sizeof(currentLogFilePath)); + // Close the existing stdout handle. This is important because otherwise + // it may still be open as stdout when we try to MoveFileEx below. + fclose(stdout); + // Rotate the current to the old log file MoveFileExA(currentLogFilePath, oldLogFilePath, MOVEFILE_REPLACE_EXISTING); - // Open the new log file - HANDLE newLogHandle = CreateFileA(currentLogFilePath, - GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_DELETE, - nullptr, - CREATE_ALWAYS, - FILE_ATTRIBUTE_NORMAL, - nullptr); - if (newLogHandle == INVALID_HANDLE_VALUE) { - return; - } - - // Convert the HANDLE to an fd (transfers ownership too) - int fd = _open_osfhandle((intptr_t)newLogHandle, _O_WRONLY); - // Redirect stdout to this new file - _dup2(fd, _fileno(stdout)); - _close(fd); + freopen(currentLogFilePath, "w", stdout); } // Print a log header