libstdc++: Support single components in name of chrono::current_zone() [PR108211]
authorJonathan Wakely <jwakely@redhat.com>
Wed, 4 Jan 2023 20:49:59 +0000 (20:49 +0000)
committerJonathan Wakely <jwakely@redhat.com>
Thu, 5 Jan 2023 00:46:00 +0000 (00:46 +0000)
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

index 6772517d55aedefeb96e593b6e21296a58c213ec..9103b159400997c46845e0520868bd1b6bc8d103 100644 (file)
@@ -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;
          }