aboutsummaryrefslogtreecommitdiffstats
path: root/src/utils
diff options
context:
space:
mode:
authorlloyd <[email protected]>2009-12-01 13:28:16 +0000
committerlloyd <[email protected]>2009-12-01 13:28:16 +0000
commitfe0276ee115bb367810ac2e06833fed297eb1715 (patch)
tree2adf34a771c5dc460f559deb33afd29501fea802 /src/utils
parent4aec044fc21526e1c9185b384f7e984b7f8622c7 (diff)
Remove system_time(), replace entirely with std::chrono.
Only remaining use of time.h/ctime is to convert from a time point to a calendar value, which still requires C's gmtime. Hide it entirely in time.cpp and return a calendar_point struct instead of a std::tm.
Diffstat (limited to 'src/utils')
-rw-r--r--src/utils/time.cpp27
-rw-r--r--src/utils/time.h22
2 files changed, 33 insertions, 16 deletions
diff --git a/src/utils/time.cpp b/src/utils/time.cpp
index 856b1c7be..1c64c820e 100644
--- a/src/utils/time.cpp
+++ b/src/utils/time.cpp
@@ -45,25 +45,30 @@ u64bit combine_timers(u32bit seconds, u32bit parts, u32bit parts_hz)
}
-/**
-* Get the system clock
-*/
-u64bit system_time()
- {
- return static_cast<u64bit>(std::time(0));
- }
-
/*
* Convert a time_t to a struct tm
*/
-std::tm time_t_to_tm(u64bit timer)
+calendar_point calendar_value(
+ const std::chrono::system_clock::time_point& time_point)
{
- std::time_t time_val = static_cast<std::time_t>(timer);
+ time_t time_val = std::chrono::system_clock::to_time_t(time_point);
+
+ // Race condition: std::gmtime is not assured thread safe,
+ // and C++ does not include gmtime_r. Use a mutex here?
std::tm* tm_p = std::gmtime(&time_val);
if (tm_p == 0)
throw Encoding_Error("time_t_to_tm could not convert");
- return (*tm_p);
+
+ std::tm tm = *tm_p;
+ // Race is over here
+
+ return calendar_point(tm.tm_year + 1900,
+ tm.tm_mon + 1,
+ tm.tm_mday,
+ tm.tm_hour,
+ tm.tm_min,
+ tm.tm_sec);
}
u64bit get_nanoseconds_clock()
diff --git a/src/utils/time.h b/src/utils/time.h
index c7f459096..28b777efe 100644
--- a/src/utils/time.h
+++ b/src/utils/time.h
@@ -9,16 +9,28 @@
#define BOTAN_TIME_H__
#include <botan/types.h>
-#include <ctime>
+#include <chrono>
namespace Botan {
/*
-* Time Access/Conversion Functions
+* Time Conversion Functions
*/
-BOTAN_DLL u64bit system_time();
-
-BOTAN_DLL std::tm time_t_to_tm(u64bit);
+struct BOTAN_DLL calendar_point
+ {
+ u32bit year;
+ byte month;
+ byte day;
+ byte hour;
+ byte minutes;
+ byte seconds;
+
+ calendar_point(u32bit y, byte mon, byte d, byte h, byte min, byte sec) :
+ year(y), month(mon), day(d), hour(h), minutes(min), seconds(sec) {}
+ };
+
+BOTAN_DLL calendar_point calendar_value(
+ const std::chrono::system_clock::time_point& time_point);
/**
@return nanoseconds resolution timestamp, unknown epoch