From: Jonathan Wakely Date: Fri, 7 Jul 2023 13:36:06 +0000 (+0100) Subject: libstdc++: Compile basic_file_stdio.cc for LFS X-Git-Tag: basepoints/gcc-15~7662 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=61fe96d4853eb743eebbf98bff24f96fe007a6e1;p=thirdparty%2Fgcc.git libstdc++: Compile basic_file_stdio.cc for LFS Instead of using fopen64, lseek64, and fstat64 we can just include which defines _FILE_OFFSET_BITS=64 (and similar target-specific macros). Then we can just use fopen, lseek and fstat as normal, and they'll be the LFS versions if supported by the target. libstdc++-v3/ChangeLog: * config/io/basic_file_stdio.cc: Define LFS macros. (__basic_file::open): Use fopen unconditionally. (get_file_offset): Use lseek unconditionally. (__basic_file::seekoff): Likewise. (__basic_file::showmanyc): Use fstat unconditionally. --- diff --git a/libstdc++-v3/config/io/basic_file_stdio.cc b/libstdc++-v3/config/io/basic_file_stdio.cc index 27c2ad2afe3a..7b1729a798f6 100644 --- a/libstdc++-v3/config/io/basic_file_stdio.cc +++ b/libstdc++-v3/config/io/basic_file_stdio.cc @@ -26,6 +26,7 @@ // ISO C++ 14882: 27.8 File-based streams // +#include #include #include #include @@ -251,11 +252,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION const char* __c_mode = fopen_mode(__mode); if (__c_mode && !this->is_open()) { -#ifdef _GLIBCXX_USE_LFS - if ((_M_cfile = fopen64(__name, __c_mode))) -#else if ((_M_cfile = fopen(__name, __c_mode))) -#endif { _M_cfile_created = true; __ret = this; @@ -389,8 +386,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION # else return ftell(__f->file()); # endif -#elif defined(_GLIBCXX_USE_LFS) - return lseek64(__f->fd(), 0, (int)ios_base::cur); #else return lseek(__f->fd(), 0, (int)ios_base::cur); #endif @@ -417,11 +412,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return -1; } return __way == ios_base::beg ? __off : std::get_file_offset(this); -#elif defined(_GLIBCXX_USE_LFS) - return lseek64(this->fd(), __off, __way); #else - if (__off > numeric_limits::max() - || __off < numeric_limits::min()) + if _GLIBCXX17_CONSTEXPR (sizeof(streamoff) > sizeof(off_t)) + if (__off > numeric_limits::max() + || __off < numeric_limits::min()) return -1L; return lseek(this->fd(), __off, __way); #endif @@ -455,20 +449,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #if defined(_GLIBCXX_HAVE_S_ISREG) || defined(_GLIBCXX_HAVE_S_IFREG) // Regular files. -#ifdef _GLIBCXX_USE_LFS - struct stat64 __buffer; - const int __err = fstat64(this->fd(), &__buffer); + struct stat __buffer; + const int __err = fstat(this->fd(), &__buffer); if (!__err && _GLIBCXX_ISREG(__buffer.st_mode)) { const streamoff __off = __buffer.st_size - std::get_file_offset(this); return std::min(__off, streamoff(numeric_limits::max())); } -#else - struct stat __buffer; - const int __err = fstat(this->fd(), &__buffer); - if (!__err && _GLIBCXX_ISREG(__buffer.st_mode)) - return __buffer.st_size - std::get_file_offset(this); -#endif #endif return 0; }