From 56be1970765b6302de19977790a537d6feaaa34b Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Wed, 4 Jan 2023 20:49:59 +0000 Subject: [PATCH] libstdc++: Support single components in name of chrono::current_zone() [PR108211] We currently only handle the case where /etc/localtime is a symlink to a path like ".../Etc/UTC" and fail for ".../UTC". This makes both work. libstdc++-v3/ChangeLog: PR libstdc++/108211 * src/c++20/tzdb.cc (chrono::current_zone()): Check for zone using only last component of the name. --- libstdc++-v3/src/c++20/tzdb.cc | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/libstdc++-v3/src/c++20/tzdb.cc b/libstdc++-v3/src/c++20/tzdb.cc index 6772517d55ae..9103b1594009 100644 --- a/libstdc++-v3/src/c++20/tzdb.cc +++ b/libstdc++-v3/src/c++20/tzdb.cc @@ -1501,8 +1501,11 @@ namespace std::chrono if (std::distance(first, last) > 2) { --last; - string name = std::prev(last)->string() + '/'; - name += last->string(); + string name = last->string(); + if (auto tz = do_locate_zone(this->zones, this->links, name)) + return tz; + --last; + name = last->string() + '/' + name; if (auto tz = do_locate_zone(this->zones, this->links, name)) return tz; } -- 2.47.2