Codechange: use thread safe time functions #9260
Merged
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.
Motivation / Problem
Functions like localtime, gmtime and asctime are not thread safe as they (might) reuse the same buffer.
Description
Use the safer _s/_r variant for localtime and gmtime, and use strftime in favour of asctime. Since similar code is used in multiple places, implement the logic only once... especially since Microsoft has localtime_s and the other localtime_r, and localtime_s has its parameters swapped. The same holds for gmtime.
Limitations
The format function being filled with preprocessor magic to prevent a warning of GCC that a non-literal string is passed to strftime, which is considered to be a bug in GCC even when the appropriate attributes are set to the function. And that magic being hidden from Microsoft's compiler so it does not warn about it. In other words: yuck... any better ideas how to solve that are appreciated.
Checklist for review
Some things are not automated, and forgotten often. This list is a reminder for the reviewers.