From patchwork Fri Jul 7 16:38:22 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jonathan Wakely X-Patchwork-Id: 117205 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:9f45:0:b0:3ea:f831:8777 with SMTP id v5csp3396036vqx; Fri, 7 Jul 2023 09:41:25 -0700 (PDT) X-Google-Smtp-Source: APBJJlFE++7n+K+HRyNdqOL/zRfOOXYdz9j6hAVC3bh4zFWSVEUebcBS/hgYKgeqown1ZPkRYa08 X-Received: by 2002:a05:6402:12d8:b0:51d:9d59:7a11 with SMTP id k24-20020a05640212d800b0051d9d597a11mr4119660edx.4.1688748085571; Fri, 07 Jul 2023 09:41:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1688748085; cv=none; d=google.com; s=arc-20160816; b=uKgLI/j4HoKa3tlzK/EiZFSGYL8v+UpL4QK+FOJJRoNOug00rBBvukHrrijjEqAZ67 BaY+I51ZjJ4MDS/bNea1QSNv5GFnZUA7BTS3lS4dXTqDunowy/J0a5FrwWIkDXccp1kk Q2E7ldDPCDzWz2rfKE/hv1dwUSXSrIkXfV1HhPwwPRWE8/tSxI5A9HdzfVXjyuAU22R/ qnw/hAYhFqZQh0miirn0L5HAFeBeTAuinccLCpD4szHMygJaSJEsoxC2xuoAO1E+kNEQ XBFVK2c14BYaEmionxz1xhfMOYwoyjQjecG6mMd261zK4zmA0GQD2EggbV1pQbK8dBAH DQ3w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:from:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence :content-transfer-encoding:mime-version:message-id:date:subject:to :dmarc-filter:delivered-to:dkim-signature:dkim-filter; bh=qQWZ29YbXP8da1/bbmbI5pkNfSStmru2JeDYdp1hoJ4=; fh=sC8lnOfyH6gL5FYlMbZ1VDz6qVPMj/3ViLJWKNUCUgQ=; b=NxtQ7bzEYxrqcLkvPp/reeDVK+RvrK3aBGDv0hz1XIxNnRCkc8zuDwf5unR0oGGs1z 6pF3Y0ZY+dTzU1Y7eC0xCNdyIIxu6+U0PdAZRtCFGq3yLnKedRsCFsRJ7NVcYM8jMQS4 /UZCwiQz/XcU24IoQqk9Jql/y0gjjotXc5craXqn6+8dVgvnl+ybCoHfIC52F7P0RZXt VkzuBSdTJYymGynJHryMQq1OXP6pCh1GY9XeKF49TnYqYA6PnPQasyhe1VKEPJuoO4Fg fkS6nnmcpYOGoJOmmTMiiIvOVrJZqdLHywFp7LAa1VciG95Vp6PAJP28ErhYSVk4BbFN wpdA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=FElxvWEJ; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from server2.sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id d17-20020a05640208d100b0051e0ecd88dcsi1852882edz.687.2023.07.07.09.41.25 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Jul 2023 09:41:25 -0700 (PDT) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) client-ip=2620:52:3:1:0:246e:9693:128c; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=FElxvWEJ; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 378FA3850AE9 for ; Fri, 7 Jul 2023 16:41:18 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 378FA3850AE9 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1688748078; bh=qQWZ29YbXP8da1/bbmbI5pkNfSStmru2JeDYdp1hoJ4=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=FElxvWEJffCWs5FVQPtWY7pDn9/+DZBMfYaphJR0SrhgDbU9rgs+UpZ4AyDFopR0O 4FB10Kzu8bYQuy+h1OjhESMG9ZmMgaJS6s/s0ByJBwbXHIuAaxEkFqG+EIR1eGqO3s YKEJ0G4/vjvA0b0TORJK1m3HgCESVePPtOVfctZA= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id A9CE3385E037 for ; Fri, 7 Jul 2023 16:40:22 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org A9CE3385E037 Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-19-EBz5VuOpO_etvRZk1zjH3g-1; Fri, 07 Jul 2023 12:40:20 -0400 X-MC-Unique: EBz5VuOpO_etvRZk1zjH3g-1 Received: from smtp.corp.redhat.com (int-mx09.intmail.prod.int.rdu2.redhat.com [10.11.54.9]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 81E78856F66; Fri, 7 Jul 2023 16:40:20 +0000 (UTC) Received: from localhost (unknown [10.42.28.140]) by smtp.corp.redhat.com (Postfix) with ESMTP id 488E9492B01; Fri, 7 Jul 2023 16:40:20 +0000 (UTC) To: libstdc++@gcc.gnu.org, gcc-patches@gcc.gnu.org Subject: [PATCH] libstdc++: Compile basic_file_stdio.cc for LFS Date: Fri, 7 Jul 2023 17:38:22 +0100 Message-ID: <20230707164019.1537221-1-jwakely@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.9 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-11.8 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Jonathan Wakely via Gcc-patches From: Jonathan Wakely Reply-To: Jonathan Wakely Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org Sender: "Gcc-patches" X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1770780712416210033?= X-GMAIL-MSGID: =?utf-8?q?1770780712416210033?= When this code was written we didn't have the header, so it conditionally used lseek64 etc. Since this is compiled into the library, not inline code in headers, we can just define the relevant macros to get a 64-bit off_t and then simplify the code. Tested x86_64-linux. I intend to commit this next week. -- >8 -- 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. --- 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; }