Move strftime to daily_filename_format_calculator

This commit is contained in:
Charles Milette 2021-11-16 10:05:35 -05:00
parent 5d6af189f1
commit 701ef17227
2 changed files with 22 additions and 19 deletions

View File

@ -164,23 +164,6 @@ inline ToDuration time_fraction(log_clock::time_point tp)
return duration_cast<ToDuration>(duration) - duration_cast<ToDuration>(secs);
}
inline size_t strftime(char *str, size_t count, const char *format, const std::tm *time)
{
// Assign to a pointer to suppress GCCs -Wformat-nonliteral
// First assign the nullptr to suppress -Wsuggest-attribute=format
std::size_t (*strftime)(char*, std::size_t, const char*, const std::tm*) = nullptr;
strftime = std::strftime;
return strftime(str, count, format, time);
}
inline size_t strftime(wchar_t *str, size_t count, const wchar_t *format, const std::tm *time)
{
// See above
std::size_t (*wcsftime)(wchar_t*, std::size_t, const wchar_t*, const std::tm*) = nullptr;
wcsftime = std::wcsftime;
return wcsftime(str, count, format, time);
}
} // namespace fmt_helper
} // namespace details
} // namespace spdlog

View File

@ -62,7 +62,7 @@ struct daily_filename_format_calculator
buf.resize(MIN_SIZE);
for (;;)
{
size_t count = details::fmt_helper::strftime(buf.data(), buf.size(), tm_format.c_str(), &now_tm);
size_t count = strftime(buf.data(), buf.size(), tm_format.c_str(), &now_tm);
if (count != 0)
{
// Remove the extra space.
@ -87,7 +87,7 @@ struct daily_filename_format_calculator
for (;;)
{
size_t size = buf.capacity() - start;
size_t count = details::fmt_helper::strftime(&buf[start], size, &tm_format[0], &now_tm);
size_t count = strftime(&buf[start], size, &tm_format[0], &now_tm);
if (count != 0)
{
// Remove the extra space.
@ -101,6 +101,26 @@ struct daily_filename_format_calculator
return fmt::to_string(buf);
#endif
}
private:
#if defined __GNUC__
# pragma GCC diagnostic push
# pragma GCC diagnostic ignored "-Wformat-nonliteral"
#endif
static size_t strftime(char *str, size_t count, const char *format, const std::tm *time)
{
return std::strftime(str, count, format, time);
}
static size_t strftime(wchar_t *str, size_t count, const wchar_t *format, const std::tm *time)
{
return std::wcsftime(str, count, format, time);
}
#if defined(__GNUC__)
# pragma GCC diagnostic pop
#endif
};
/*