summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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"] = "";