summaryrefslogtreecommitdiff
path: root/ftparchive/writer.cc
diff options
context:
space:
mode:
authorDavid Kalnischkies <david@kalnischkies.de>2016-05-28 12:41:12 +0200
committerJulian Andres Klode <jak@debian.org>2016-11-14 15:10:03 +0100
commit78e7b683c645e907db12658405a4b201a6243ea8 (patch)
tree8e789132e5808f422f9dbd56264c0b093289962b /ftparchive/writer.cc
parent2da46c907ee0f9fa022f39b12dcf72c02013648d (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. (cherry picked from commit e0b01a85bd8395449a88e1806ea4a4e3acdbac33)
Diffstat (limited to 'ftparchive/writer.cc')
-rw-r--r--ftparchive/writer.cc29
1 files changed, 12 insertions, 17 deletions
diff --git a/ftparchive/writer.cc b/ftparchive/writer.cc
index 674a8f516..5488a7be2 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>
@@ -983,35 +984,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"] = "";