From 51bf9cfacb644659e5d9c7e6fe66396726f2f4f4 Mon Sep 17 00:00:00 2001 From: Lucian Petrut Date: Fri, 22 May 2020 07:18:50 +0000 Subject: [PATCH] Fix Mingw support If the ``_POSIX_`` flag is set, _fdopen will not be defined by Mingw headers, which is addressed by this commit. For what is worth, as opposed to ``fdopen``, ``_pipe`` *will* actually have the ``_`` prefix when ``_POSIX_`` is set. --- include/fmt/os.h | 2 +- src/os.cc | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/include/fmt/os.h b/include/fmt/os.h index 8aa474a6..31df8eea 100644 --- a/include/fmt/os.h +++ b/include/fmt/os.h @@ -50,7 +50,7 @@ #ifdef FMT_SYSTEM # define FMT_POSIX_CALL(call) FMT_SYSTEM(call) #else -# define FMT_SYSTEM(call) call +# define FMT_SYSTEM(call) ::call # ifdef _WIN32 // Fix warnings about deprecated symbols. # define FMT_POSIX_CALL(call) ::_##call diff --git a/src/os.cc b/src/os.cc index abf6a380..386119db 100644 --- a/src/os.cc +++ b/src/os.cc @@ -289,7 +289,11 @@ void file::pipe(file& read_end, file& write_end) { buffered_file file::fdopen(const char* mode) { // Don't retry as fdopen doesn't return EINTR. + #if defined(__MINGW32__) && defined(_POSIX_) + FILE* f = ::fdopen(fd_, mode); + #else FILE* f = FMT_POSIX_CALL(fdopen(fd_, mode)); + #endif if (!f) FMT_THROW( system_error(errno, "cannot associate stream with file descriptor"));