--- gcc-7.5.0/libstdc++-v3/config/io/basic_file_stdio.cc.orig 2017-08-14 14:14:09.143001000 +0200 +++ gcc-7.5.0/libstdc++-v3/config/io/basic_file_stdio.cc 2019-12-25 20:03:25.172581834 +0100 @@ -236,7 +236,7 @@ const char* __c_mode = fopen_mode(__mode); if (__c_mode && !this->is_open()) { -#ifdef _GLIBCXX_USE_LFS +#if defined(_GLIBCXX_USE_LFS) || defined(__MINGW32__) if ((_M_cfile = fopen64(__name, __c_mode))) #else if ((_M_cfile = fopen(__name, __c_mode))) @@ -311,7 +311,7 @@ streamoff __basic_file::seekoff(streamoff __off, ios_base::seekdir __way) throw () { -#ifdef _GLIBCXX_USE_LFS +#if defined(_GLIBCXX_USE_LFS) || defined(__MINGW32__) return lseek64(this->fd(), __off, __way); #else if (__off > numeric_limits::max() @@ -355,6 +355,15 @@ if (!__err && _GLIBCXX_ISREG(__buffer.st_mode)) { const streamoff __off = __buffer.st_size - lseek64(this->fd(), 0, + ios_base::cur); + return std::min(__off, streamoff(numeric_limits::max())); + } +#elif defined(__MINGW32__) + struct _stati64 __buffer; + const int __err = _fstati64(this->fd(), &__buffer); + if (!__err && _GLIBCXX_ISREG(__buffer.st_mode)) + { + const streamoff __off = __buffer.st_size - lseek64(this->fd(), 0, ios_base::cur); return std::min(__off, streamoff(numeric_limits::max())); } diff -r faddb1a6e933 libstdc++-v3/include/ext/stdio_sync_filebuf.h --- a/libstdc++-v3/include/ext/stdio_sync_filebuf.h Fri Jul 31 08:58:42 2009 -0600 +++ b/libstdc++-v3/include/ext/stdio_sync_filebuf.h Fri Jul 31 13:09:27 2009 -0600 @@ -163,7 +163,7 @@ __whence = SEEK_CUR; else __whence = SEEK_END; -#ifdef _GLIBCXX_USE_LFS +#if defined(_GLIBCXX_USE_LFS) || defined(__MINGW32__) if (!fseeko64(_M_file, __off, __whence)) __ret = std::streampos(ftello64(_M_file)); #else