Re: [PATCH] libstdc++: Ignore filesystem::canonical errors for /etc/localtime [PR125467]
Jonathan Wakely <[email protected]>
| Newsgroups | gmane.comp.gcc.patches,gmane.comp.gcc.libstdc++.devel |
|---|---|
| Message-ID | <CAH6eHdRGtTS37MfjqtsfZAigeJQbdao8_6mmyZ5PZUbi058cjA@mail.gmail.com> |
On Thu, 13 Aug 2026, 07:10 Tomasz Kamiński, <[email protected]> wrote: > 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. > --- > I agree there is inconsistency in treatment of filesystem errors, and > they seem to be consistently ignored on other paths. Torbjorn could you > confirm that this addresses the issue. > We will still need to wait for Jonathan to OK this. > > Not sure how to test this branch. But tested this change locally. > OK for trunk? > OK The newlib bug should still be fixed. > 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 e358b778e2d..0d004a8a6fe 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") > -- > 2.55.0 > >