diff options
author | Brad King <brad.king@kitware.com> | 2021-11-18 15:38:01 (GMT) |
---|---|---|
committer | Kitware Robot <kwrobot@kitware.com> | 2021-11-18 15:38:22 (GMT) |
commit | b33cae9d2dcd6669181a0d224f229b4c7df4dc43 (patch) | |
tree | 4105ae4556efc6b57de918413a6b77dfdca86b02 | |
parent | a5eed9e5e0aa2a4feac1c6dc4c717e167420a657 (diff) | |
parent | 26c9fbab4618d53f49f92ff3a000951a1d9b9fde (diff) | |
download | CMake-b33cae9d2dcd6669181a0d224f229b4c7df4dc43.zip CMake-b33cae9d2dcd6669181a0d224f229b4c7df4dc43.tar.gz CMake-b33cae9d2dcd6669181a0d224f229b4c7df4dc43.tar.bz2 |
Merge topic 'fix-mingw32-gcc11-ice' into release-3.22
26c9fbab46 MINGW-w64: Fix string(TIMESTAMP) build on 32bits.
f0eae9292b cmTimestamp: Declare component buffer before MinGW-specific code
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !6737
-rw-r--r-- | Source/cmTimestamp.cxx | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/Source/cmTimestamp.cxx b/Source/cmTimestamp.cxx index cfea4cf..c8f5a4b 100644 --- a/Source/cmTimestamp.cxx +++ b/Source/cmTimestamp.cxx @@ -192,11 +192,13 @@ std::string cmTimestamp::AddTimestampComponent(char flag, } } + char buffer[16]; + #ifdef __MINGW32__ /* See a bug in MinGW: https://sourceforge.net/p/mingw-w64/bugs/793/. A work * around is to try to use strftime() from ucrtbase.dll. */ using T = size_t(WINAPI*)(char*, size_t, const char*, const struct tm*); - auto loadStrftime = [] { + auto loadUcrtStrftime = []() -> T { auto handle = LoadLibraryExA("ucrtbase.dll", nullptr, LOAD_LIBRARY_SEARCH_SYSTEM32); if (handle) { @@ -205,12 +207,16 @@ std::string cmTimestamp::AddTimestampComponent(char flag, return reinterpret_cast<T>(GetProcAddress(handle, "strftime")); # pragma GCC diagnostic pop } - return strftime; + return nullptr; }; - static T strftime = loadStrftime(); -#endif + static T ucrtStrftime = loadUcrtStrftime(); - char buffer[16]; + if (ucrtStrftime) { + size_t size = + ucrtStrftime(buffer, sizeof(buffer), formatString.c_str(), &timeStruct); + return std::string(buffer, size); + } +#endif size_t size = strftime(buffer, sizeof(buffer), formatString.c_str(), &timeStruct); |