epee: detect strptime, use std::get_time as fallback

This commit is contained in:
moneromooo-monero 2018-01-11 21:38:24 +00:00
parent 35d5aa36c9
commit b7e5a70bb1
No known key found for this signature in database
GPG key ID: 686F07454D6CEFC3
2 changed files with 10 additions and 0 deletions

View file

@ -868,5 +868,9 @@ option(INSTALL_VENDORED_LIBUNBOUND "Install libunbound binary built from source
CHECK_C_COMPILER_FLAG(-std=c11 HAVE_C11) CHECK_C_COMPILER_FLAG(-std=c11 HAVE_C11)
include(CheckLibraryExists)
include(CheckFunctionExists)
check_library_exists(c memset_s "string.h" HAVE_MEMSET_S) check_library_exists(c memset_s "string.h" HAVE_MEMSET_S)
check_library_exists(c explicit_bzero "strings.h" HAVE_EXPLICIT_BZERO) check_library_exists(c explicit_bzero "strings.h" HAVE_EXPLICIT_BZERO)
check_function_exists(strptime HAVE_STRPTIME)

View file

@ -150,8 +150,14 @@ POP_WARNINGS
else if (boost::regex_match (from, boost::regex("\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\dZ"))) else if (boost::regex_match (from, boost::regex("\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\dZ")))
{ {
// Convert to unix timestamp // Convert to unix timestamp
#ifdef HAVE_STRPTIME
struct tm tm; struct tm tm;
if (strptime(from.c_str(), "%Y-%m-%dT%H:%M:%S", &tm)) if (strptime(from.c_str(), "%Y-%m-%dT%H:%M:%S", &tm))
#else
std::tm tm = {};
std::istringstream ss(from);
if (ss >> std::get_time(&tm, "%Y-%m-%dT%H:%M:%S"))
#endif
to = std::mktime(&tm); to = std::mktime(&tm);
} else } else
ASSERT_AND_THROW_WRONG_CONVERSION(); ASSERT_AND_THROW_WRONG_CONVERSION();