From 01746ab16d91cdf469716d232e9857d00c9ce6f7 Mon Sep 17 00:00:00 2001 From: Alexander Shaduri Date: Mon, 31 Jan 2022 14:38:31 +0400 Subject: [PATCH] Ported some win32_tools.h code to std::filesystem. --- src/hz/win32_tools.h | 42 +++++++++++++----------------------------- 1 file changed, 13 insertions(+), 29 deletions(-) diff --git a/src/hz/win32_tools.h b/src/hz/win32_tools.h index 9b0c480..33e561d 100644 --- a/src/hz/win32_tools.h +++ b/src/hz/win32_tools.h @@ -30,6 +30,7 @@ Copyright: #include // std::strlen #include // std::wcslen #include // std::ios::sync_with_stdio +#include #if defined __MINGW32__ #include <_mingw.h> // MINGW_HAS_SECURE_API @@ -435,40 +436,23 @@ namespace internal { std::fclose(stdout); std::fclose(stderr); - // See if the files have any output in them + // See if the files have any output in them. If not, remove the empty files. if (!Win32RedirectHolder::stdout_file.empty()) { - std::FILE* file = nullptr; - #if defined MINGW_HAS_SECURE_API || defined _MSC_VER - errno = _wfopen_s(&file, Win32RedirectHolder::stdout_file.c_str(), L"rb"); - #else - file = _wfopen(Win32RedirectHolder::stdout_file.c_str(), L"rb"); - #endif - if (file) { - bool empty = (std::fgetc(file) == EOF); - std::fclose(file); - if (empty) { - (void)_wremove(Win32RedirectHolder::stdout_file.c_str()); // ignore possible failure - } + std::filesystem::path path(Win32RedirectHolder::stdout_file); + std::error_code ignored_ec; + if (std::filesystem::exists(path, ignored_ec) && std::filesystem::is_empty(path, ignored_ec)) { + std::filesystem::remove(path, ignored_ec); } + Win32RedirectHolder::stdout_file.clear(); } - Win32RedirectHolder::stdout_file.clear(); - - if (!Win32RedirectHolder::stdout_file.empty()) { - std::FILE* file = nullptr; - #if defined MINGW_HAS_SECURE_API || defined _MSC_VER - errno = _wfopen_s(&file, Win32RedirectHolder::stderr_file.c_str(), L"rb"); - #else - file = _wfopen(Win32RedirectHolder::stderr_file.c_str(), L"rb"); - #endif - if (file) { - bool empty = (std::fgetc(file) == EOF); - std::fclose(file); - if (empty) { - (void)_wremove(Win32RedirectHolder::stderr_file.c_str()); // ignore possible failure - } + if (!Win32RedirectHolder::stderr_file.empty()) { + std::filesystem::path path(Win32RedirectHolder::stderr_file); + std::error_code ignored_ec; + if (std::filesystem::exists(path, ignored_ec) && std::filesystem::is_empty(path, ignored_ec)) { + std::filesystem::remove(path, ignored_ec); } + Win32RedirectHolder::stderr_file.clear(); } - Win32RedirectHolder::stderr_file.clear(); }