summaryrefslogtreecommitdiff
path: root/ftparchive
diff options
context:
space:
mode:
authorDavid Kalnischkies <david@kalnischkies.de>2016-05-28 12:41:12 +0200
committerDavid Kalnischkies <david@kalnischkies.de>2016-05-28 12:46:37 +0200
commite0b01a85bd8395449a88e1806ea4a4e3acdbac33 (patch)
treee5a5c295adc1ab0766999076265779e0d3f9e031 /ftparchive
parent9febc2b238e1e322dce1f94ecbed46d595893b52 (diff)
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.
Diffstat (limited to 'ftparchive')
-rw-r--r--ftparchive/writer.cc29
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"] = "";