Use gmtime_r instead of gmtime when compiling for posixy platforms #2165
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
gmtime
has the rather obvious problem of not being reentrant, and thus being rather unsafe to use. Catch2 does not support threads in its internals, but this is not enough to avoid the danger: if user usesgmtime
inside the tested function, then our use ofgmtime
in the JUnit reporter will corrupt their state.However, it took until
C11
to get a standard alternative, which isgmtime_s
, and which is only available under specific conditions (__STDC_WANT_LIB_EXT1__
has to be defined before the first inclusion oftime.h
). Instead we usegmtime_r
, which while standardized only byC23
, has been part of POSIX for ages.While there are no nice compatibility guarantees for using
gmtime_r
, it should likely be compatible with all major supported non-Windows platforms.GitHub Issues
Closes #2008