diff options
author | David Kalnischkies <david@kalnischkies.de> | 2016-05-28 12:41:12 +0200 |
---|---|---|
committer | David Kalnischkies <david@kalnischkies.de> | 2016-05-28 12:46:37 +0200 |
commit | e0b01a85bd8395449a88e1806ea4a4e3acdbac33 (patch) | |
tree | e5a5c295adc1ab0766999076265779e0d3f9e031 | |
parent | 9febc2b238e1e322dce1f94ecbed46d595893b52 (diff) | |
download | apt-e0b01a85bd8395449a88e1806ea4a4e3acdbac33.tar.gz |
avoid changing the global LC_TIME for Release writing
Using C++ here avoids calling setlocale here which never really was that
ideal, but needed to avoid locale specific weekday/month names.
-rw-r--r-- | ftparchive/writer.cc | 29 |
1 files changed, 12 insertions, 17 deletions
diff --git a/ftparchive/writer.cc b/ftparchive/writer.cc index 65b0f8553..1036ce0b8 100644 --- a/ftparchive/writer.cc +++ b/ftparchive/writer.cc @@ -37,6 +37,7 @@ #include <unistd.h> #include <ctime> #include <iostream> +#include <iomanip> #include <sstream> #include <memory> #include <utility> @@ -987,35 +988,29 @@ ReleaseWriter::ReleaseWriter(FileFd * const GivenOutput, string const &/*DB*/) : AddPatterns(_config->FindVector("APT::FTPArchive::Release::Patterns")); time_t const now = time(NULL); + auto const posix = std::locale("C.UTF-8"); - setlocale(LC_TIME, "C"); - - char datestr[128]; - if (strftime(datestr, sizeof(datestr), "%a, %d %b %Y %H:%M:%S UTC", - gmtime(&now)) == 0) - { - datestr[0] = '\0'; - } + // FIXME: use TimeRFC1123 here? But that uses GMT to satisfy HTTP/1.1 + std::ostringstream datestr; + datestr.imbue(posix); + datestr << std::put_time(gmtime(&now), "%a, %d %b %Y %H:%M:%S UTC"); time_t const validuntil = now + _config->FindI("APT::FTPArchive::Release::ValidTime", 0); - char validstr[128]; - if (now == validuntil || - strftime(validstr, sizeof(validstr), "%a, %d %b %Y %H:%M:%S UTC", - gmtime(&validuntil)) == 0) + std::ostringstream validstr; + if (validuntil != now) { - validstr[0] = '\0'; + datestr.imbue(posix); + validstr << std::put_time(gmtime(&validuntil), "%a, %d %b %Y %H:%M:%S UTC"); } - setlocale(LC_TIME, ""); - map<string,string> Fields; Fields["Origin"] = ""; Fields["Label"] = ""; Fields["Suite"] = ""; Fields["Version"] = ""; Fields["Codename"] = ""; - Fields["Date"] = datestr; - Fields["Valid-Until"] = validstr; + Fields["Date"] = datestr.str(); + Fields["Valid-Until"] = validstr.str(); Fields["Architectures"] = ""; Fields["Components"] = ""; Fields["Description"] = ""; |