From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2181) id BE1F438582BE; Wed, 12 Jul 2023 20:04:31 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org BE1F438582BE DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1689192271; bh=QNjOEYpDiWpd1XKvfUvRcFXovKLW6atomHfxTuy0AtY=; h=From:To:Subject:Date:From; b=Dc9ttFKLKWMT/+lwlBtHMHfMFPqfew8KsrFr0XD74v/BxRY8ghbKpaGLHdiJQR5PL LBCOLw1TYxEWYedoGVR8wixf7YGeH5gvkn4ulqEmI2El40sRN4OUpuyztF/0U4MMt5 arGYdGKfXIc/cLEFe0tdp1CFGFNxJ4oRjdiBIsoQ= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Jonathan Wakely To: gcc-cvs@gcc.gnu.org, libstdc++-cvs@gcc.gnu.org Subject: [gcc r14-2477] libstdc++: Compile basic_file_stdio.cc for LFS X-Act-Checkin: gcc X-Git-Author: Jonathan Wakely X-Git-Refname: refs/heads/master X-Git-Oldrev: 2f6bbc9a7d9a62423c576e13dc46323fe16ba5aa X-Git-Newrev: 61fe96d4853eb743eebbf98bff24f96fe007a6e1 Message-Id: <20230712200431.BE1F438582BE@sourceware.org> Date: Wed, 12 Jul 2023 20:04:31 +0000 (GMT) List-Id: https://gcc.gnu.org/g:61fe96d4853eb743eebbf98bff24f96fe007a6e1 commit r14-2477-g61fe96d4853eb743eebbf98bff24f96fe007a6e1 Author: Jonathan Wakely Date: Fri Jul 7 14:36:06 2023 +0100 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: --- libstdc++-v3/config/io/basic_file_stdio.cc | 25 ++++++------------------- 1 file changed, 6 insertions(+), 19 deletions(-) diff --git a/libstdc++-v3/config/io/basic_file_stdio.cc b/libstdc++-v3/config/io/basic_file_stdio.cc index 27c2ad2afe3..7b1729a798f 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; }