From 00a1736307a45f83396796bb29f759c49f685f07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=97=84=ED=83=9C=EC=9A=A9?= Date: Tue, 8 Jul 2025 02:18:38 +0900 Subject: [PATCH] refactor: throw exception on fopen failure in safe_fopen --- test/util.h | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/test/util.h b/test/util.h index 803cdeea..dee1d415 100644 --- a/test/util.h +++ b/test/util.h @@ -9,6 +9,12 @@ #include #include #include +#include +#include +#include + + + #include "fmt/os.h" @@ -31,14 +37,24 @@ extern const char* const file_content; // Opens a buffered file for reading. auto open_buffered_file(FILE** fp = nullptr) -> fmt::buffered_file; -inline auto safe_fopen(const char* filename, const char* mode) -> FILE* { +inline FILE* safe_fopen(const char* filename, const char* mode) { #if defined(_WIN32) && !defined(__MINGW32__) - // Fix MSVC warning about "unsafe" fopen. FILE* f = nullptr; - errno = fopen_s(&f, filename, mode); + int err = fopen_s(&f, filename, mode); + if (err != 0 || f == nullptr) { + throw std::runtime_error( + std::string("cannot open file ") + filename + ": " + std::strerror(err) + ); + } return f; #else - return std::fopen(filename, mode); + FILE* f = std::fopen(filename, mode); + if (f == nullptr) { + throw std::runtime_error( + std::string("cannot open file ") + filename + ": " + std::strerror(errno) + ); + } + return f; #endif }