From 25fedb2b80dcc02cad70e52f9c06ae7b485e5097 Mon Sep 17 00:00:00 2001 From: Benjamin Redelings Date: Wed, 24 Jun 2026 19:26:34 -0700 Subject: [PATCH] Fix MinGW input file handling --- lib/input.cpp | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/lib/input.cpp b/lib/input.cpp index 5a8fd00f..94850289 100644 --- a/lib/input.cpp +++ b/lib/input.cpp @@ -39,7 +39,13 @@ #include #include -#if (defined(__WIN32__) || defined(_WIN32) || defined(WIN32) || defined(_WIN64) || defined(__BORLANDC__)) && !defined(__CYGWIN__) && !defined(__MINGW32__) && !defined(__MINGW64__) +#if (defined(__WIN32__) || defined(_WIN32) || defined(WIN32) || defined(_WIN64) || defined(__BORLANDC__)) && !defined(__CYGWIN__) +# define REFLEX_WINDOWS_FILE_IO 1 +#else +# define REFLEX_WINDOWS_FILE_IO 0 +#endif + +#if REFLEX_WINDOWS_FILE_IO # include # include # define off_t __int64 @@ -47,11 +53,7 @@ # define fseeko _fseeki64 #else # include // off_t, fstat() -# if (defined(__WIN32__) || defined(_WIN32) || defined(WIN32) || defined(_WIN64)) && (defined(__MINGW32__) || defined(__MINGW64__)) && defined(_UCRT) -# include -# else -# include -# endif +# include #endif namespace reflex { @@ -653,7 +655,7 @@ void Input::file_init() { // attempt to determine the file size with fstat() #if !defined(HAVE_CONFIG_H) || defined(HAVE_FSTAT) -#if (defined(__WIN32__) || defined(_WIN32) || defined(WIN32) || defined(_WIN64) || defined(__BORLANDC__)) && !defined(__CYGWIN__) && !defined(__MINGW32__) && !defined(__MINGW64__) +#if REFLEX_WINDOWS_FILE_IO struct _stat st; if (_fstat(_fileno(file_), &st) == 0 && ((st.st_mode & S_IFMT) == S_IFREG) && st.st_size <= 4294967295LL) #else @@ -1030,7 +1032,7 @@ bool Input::file_ready() { if (file_ == NULL || feof(file_)) return false; -#if (defined(__WIN32__) || defined(_WIN32) || defined(WIN32) || defined(_WIN64) || defined(__BORLANDC__)) && !defined(__CYGWIN__) && !defined(__MINGW32__) && !defined(__MINGW64__) +#if REFLEX_WINDOWS_FILE_IO return !ferror(file_); #else int fd = fileno(file_);