diff options
author | lloyd <[email protected]> | 2009-12-01 13:28:16 +0000 |
---|---|---|
committer | lloyd <[email protected]> | 2009-12-01 13:28:16 +0000 |
commit | fe0276ee115bb367810ac2e06833fed297eb1715 (patch) | |
tree | 2adf34a771c5dc460f559deb33afd29501fea802 /src/utils | |
parent | 4aec044fc21526e1c9185b384f7e984b7f8622c7 (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.cpp | 27 | ||||
-rw-r--r-- | src/utils/time.h | 22 |
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 |