summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/inspircd.h5
-rw-r--r--src/coremods/core_info/cmd_time.cpp6
-rw-r--r--src/filelogger.cpp5
-rw-r--r--src/helperfuncs.cpp12
-rw-r--r--src/modules/m_alltime.cpp4
-rw-r--r--src/modules/m_httpd.cpp7
6 files changed, 18 insertions, 21 deletions
diff --git a/include/inspircd.h b/include/inspircd.h
index 0f6a411a3..1b1543e28 100644
--- a/include/inspircd.h
+++ b/include/inspircd.h
@@ -662,8 +662,11 @@ class CoreExport InspIRCd
void Cleanup();
/** Return a time_t as a human-readable string.
+ * @param format The format to retrieve the date/time in. See `man 3 strftime`
+ * for more information. If NULL, "%a %b %d %T %Y" is assumed.
+ * @return A string representing the given date/time.
*/
- static std::string TimeString(time_t curtime);
+ static std::string TimeString(time_t curtime, const char* format = NULL);
/** Begin execution of the server.
* NOTE: this function NEVER returns. Internally,
diff --git a/src/coremods/core_info/cmd_time.cpp b/src/coremods/core_info/cmd_time.cpp
index 6a10dc327..95cfb12fd 100644
--- a/src/coremods/core_info/cmd_time.cpp
+++ b/src/coremods/core_info/cmd_time.cpp
@@ -32,12 +32,8 @@ CmdResult CommandTime::Handle (const std::vector<std::string>& parameters, User
if (parameters.size() > 0 && parameters[0] != ServerInstance->Config->ServerName)
return CMD_SUCCESS;
- time_t local = ServerInstance->Time();
- struct tm* timeinfo = localtime(&local);
- const std::string& humanTime = asctime(timeinfo);
-
user->SendText(":%s %03d %s %s :%s", ServerInstance->Config->ServerName.c_str(), RPL_TIME, user->nick.c_str(),
- ServerInstance->Config->ServerName.c_str(), humanTime.c_str());
+ ServerInstance->Config->ServerName.c_str(), InspIRCd::TimeString(ServerInstance->Time()).c_str());
return CMD_SUCCESS;
}
diff --git a/src/filelogger.cpp b/src/filelogger.cpp
index edb753a50..5786758da 100644
--- a/src/filelogger.cpp
+++ b/src/filelogger.cpp
@@ -45,10 +45,7 @@ void FileLogStream::OnLog(LogLevel loglevel, const std::string &type, const std:
if (ServerInstance->Time() != LAST)
{
- time_t local = ServerInstance->Time();
- struct tm *timeinfo = localtime(&local);
-
- TIMESTR.assign(asctime(timeinfo), 24);
+ TIMESTR = InspIRCd::TimeString(ServerInstance->Time());
LAST = ServerInstance->Time();
}
diff --git a/src/helperfuncs.cpp b/src/helperfuncs.cpp
index 6316d1e34..9ad481bb8 100644
--- a/src/helperfuncs.cpp
+++ b/src/helperfuncs.cpp
@@ -403,7 +403,7 @@ const char* InspIRCd::Format(const char* formatString, ...)
return ret;
}
-std::string InspIRCd::TimeString(time_t curtime)
+std::string InspIRCd::TimeString(time_t curtime, const char* format)
{
#ifdef _WIN32
if (curtime < 0)
@@ -424,7 +424,15 @@ std::string InspIRCd::TimeString(time_t curtime)
else if (timeinfo->tm_year + 1900 < 1000)
timeinfo->tm_year = 0;
- return std::string(asctime(timeinfo),24);
+ // This is the default format used by asctime without the terminating new line.
+ if (!format)
+ format = "%a %b %d %H:%M:%S %Y";
+
+ char buffer[512];
+ if (!strftime(buffer, sizeof(buffer), format, timeinfo))
+ buffer[0] = '\0';
+
+ return buffer;
}
std::string InspIRCd::GenRandomStr(int length, bool printable)
diff --git a/src/modules/m_alltime.cpp b/src/modules/m_alltime.cpp
index 58f7c4fb5..ceee4abbc 100644
--- a/src/modules/m_alltime.cpp
+++ b/src/modules/m_alltime.cpp
@@ -31,9 +31,7 @@ class CommandAlltime : public Command
CmdResult Handle(const std::vector<std::string> &parameters, User *user)
{
- char fmtdate[64];
- time_t now = ServerInstance->Time();
- strftime(fmtdate, sizeof(fmtdate), "%Y-%m-%d %H:%M:%S", gmtime(&now));
+ const std::string fmtdate = InspIRCd::TimeString(ServerInstance->Time(), "%Y-%m-%d %H:%M:%S");
std::string msg = ":" + ServerInstance->Config->ServerName + " NOTICE " + user->nick + " :System time is " + fmtdate + " (" + ConvToStr(ServerInstance->Time()) + ") on " + ServerInstance->Config->ServerName;
diff --git a/src/modules/m_httpd.cpp b/src/modules/m_httpd.cpp
index dda39afec..efd285f8c 100644
--- a/src/modules/m_httpd.cpp
+++ b/src/modules/m_httpd.cpp
@@ -185,12 +185,7 @@ class HttpServerSocket : public BufferedSocket
WriteData(http_version + " "+ConvToStr(response)+" "+Response(response)+"\r\n");
- time_t local = ServerInstance->Time();
- struct tm *timeinfo = gmtime(&local);
- char *date = asctime(timeinfo);
- date[strlen(date) - 1] = '\0';
- rheaders.CreateHeader("Date", date);
-
+ rheaders.CreateHeader("Date", InspIRCd::TimeString(ServerInstance->Time(), "%a, %d %b %Y %H:%M:%S GMT"));
rheaders.CreateHeader("Server", INSPIRCD_BRANCH);
rheaders.SetHeader("Content-Length", ConvToStr(size));