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.
This commit is contained in:
Jonathan Wakely 2023-01-04 20:49:59 +00:00
parent b1ad748754
commit 56be197076

View File

@ -1501,8 +1501,11 @@ namespace std::chrono
if (std::distance(first, last) > 2) if (std::distance(first, last) > 2)
{ {
--last; --last;
string name = std::prev(last)->string() + '/'; string name = last->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)) if (auto tz = do_locate_zone(this->zones, this->links, name))
return tz; return tz;
} }