[gcc r17-3256] libstdc++: Ignore filesystem::canonical errors for /etc/localtime [PR125467]

Tomasz Kaminski tkaminsk@gcc.gnu.org
Thu Aug 13 09:35:01 GMT 2026


https://gcc.gnu.org/g:4af34d33c9e006eb8a142fe09910e8d25c188a48

commit r17-3256-g4af34d33c9e006eb8a142fe09910e8d25c188a48
Author: Tomasz Kamiński <tkaminsk@redhat.com>
Date:   Thu Aug 13 07:54:44 2026 +0200

    libstdc++: Ignore filesystem::canonical errors for /etc/localtime [PR125467]
    
    While the errors from realpath (and readlink before r17-2048-gcc195f7b11a406)
    are ignored (str is left empty), the filesystem::canonical path thrown
    exception in such situation. This patch ignores the error consistently,
    by using error_code overload of filesystem::canonical.
    
    The !ec check before str assignment is not necessary, as standard requires
    that filesystem::canonical returns empty path, but I think it helps
    readability.
    
    libstdc++-v3/ChangeLog:
    
            PR libstdc++/125467
            * src/c++20/tzdb.cc (tzdb::current_zone): Use error_code overload
            of filesystem::canonical to ignore errors.
    
    Reviewed-by: Jonathan Wakely <jwakely@redhat.com>
    Signed-off-by: Tomasz Kamiński <tkaminsk@redhat.com>

Diff:
---
 libstdc++-v3/src/c++20/tzdb.cc | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/libstdc++-v3/src/c++20/tzdb.cc b/libstdc++-v3/src/c++20/tzdb.cc
index e358b778e2d6..0d004a8a6fea 100644
--- a/libstdc++-v3/src/c++20/tzdb.cc
+++ b/libstdc++-v3/src/c++20/tzdb.cc
@@ -2335,8 +2335,10 @@ constinit tzdb_list::_Node::NumLeapSeconds tzdb_list::_Node::num_leap_seconds;
 	str = p;
       }
 #else
-    string sbuf = std::filesystem::canonical("/etc/localtime").string();
-    str = sbuf;
+    error_code ec;
+    string sbuf = std::filesystem::canonical("/etc/localtime", ec).string();
+    if (!ec)
+      str = sbuf;
 #endif
 
     if (!str.empty() && str != "/etc/localtime")


More information about the Libstdc++-cvs mailing list