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 }