logging: remove part for when gmtime_r is not available

now that CONFIG_POSIX_C_LANG_SUPPORT_R will
add a custom implementation for gmtime_r() if that
is not provided by the toolchain, we can simply depend on
that, instead of using out own.

Signed-off-by: Fin Maaß <f.maass@vogl-electronic.com>
This commit is contained in:
Fin Maaß 2024-12-09 12:29:08 +01:00 committed by Benjamin Cabé
commit 1d4249dea6
5 changed files with 38 additions and 82 deletions

View file

@ -178,7 +178,7 @@ config LOG_BACKEND_FORMAT_TIMESTAMP
choice LOG_BACKEND_FORMAT_TIMESTAMP_MODE
prompt "Timestamp format mode"
default LOG_OUTPUT_FORMAT_DATE_TIMESTAMP if LOG_TIMESTAMP_USE_REALTIME
default LOG_OUTPUT_FORMAT_DATE_TIMESTAMP if LOG_TIMESTAMP_USE_REALTIME && POSIX_C_LANG_SUPPORT_R
default LOG_OUTPUT_FORMAT_TIME_TIMESTAMP
config LOG_OUTPUT_FORMAT_TIME_TIMESTAMP
@ -188,11 +188,13 @@ config LOG_OUTPUT_FORMAT_TIME_TIMESTAMP
config LOG_OUTPUT_FORMAT_DATE_TIMESTAMP
bool "Format timestamp in date format"
depends on POSIX_C_LANG_SUPPORT_R
help
When enabled timestamp is formatted to YYYY-MM-DD hh:mm:ss.ms,us.
config LOG_OUTPUT_FORMAT_ISO8601_TIMESTAMP
bool "Format timestamp in ISO 8601 format"
depends on POSIX_C_LANG_SUPPORT_R
help
When enabled timestamp is formatted to YYYY-MM-DDThh:mm:ss,ffffffZ.

View file

@ -6,6 +6,7 @@
config LOG_BACKEND_NET
bool "Networking backend"
depends on NETWORKING && (NET_UDP || NET_TCP) && NET_SOCKETS && !LOG_MODE_IMMEDIATE
depends on POSIX_C_LANG_SUPPORT_R
help
Send syslog messages to network server.
See RFC 5424 (syslog protocol) and RFC 5426 (syslog over UDP) and

View file

@ -50,17 +50,6 @@ static const char *const colors[] = {
static uint32_t freq;
static log_timestamp_t timestamp_div;
#define SECONDS_IN_DAY 86400U
static uint32_t days_in_month[12] = {31, 28, 31, 30, 31, 30, 31,
31, 30, 31, 30, 31};
struct YMD_date {
uint32_t year;
uint32_t month;
uint32_t day;
};
/* The RFC 5424 allows very flexible mapping and suggest the value 0 being the
* highest severity and 7 to be the lowest (debugging level) severity.
*
@ -150,46 +139,6 @@ static int print_formatted(const struct log_output *output,
return length;
}
static inline bool is_leap_year(uint32_t year)
{
return (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0));
}
static void __attribute__((unused)) get_YMD_from_seconds(uint64_t seconds,
struct YMD_date *output_date)
{
uint64_t tmp;
int i;
output_date->year = 1970;
output_date->month = 1;
output_date->day = 1;
/* compute the proper year */
while (1) {
tmp = (is_leap_year(output_date->year)) ?
366*SECONDS_IN_DAY : 365*SECONDS_IN_DAY;
if (tmp > seconds) {
break;
}
seconds -= tmp;
output_date->year++;
}
/* compute the proper month */
for (i = 0; i < ARRAY_SIZE(days_in_month); i++) {
tmp = ((i == 1) && is_leap_year(output_date->year)) ?
((uint64_t)days_in_month[i] + 1) * SECONDS_IN_DAY :
(uint64_t)days_in_month[i] * SECONDS_IN_DAY;
if (tmp > seconds) {
output_date->month += i;
break;
}
seconds -= tmp;
}
output_date->day += seconds / SECONDS_IN_DAY;
}
static int timestamp_print(const struct log_output *output,
uint32_t flags, log_timestamp_t timestamp)
{
@ -233,27 +182,27 @@ static int timestamp_print(const struct log_output *output,
us = (1000 * (remainder * 1000U - (ms * freq))) / freq;
if (IS_ENABLED(CONFIG_LOG_BACKEND_NET) && flags & LOG_OUTPUT_FLAG_FORMAT_SYSLOG) {
#if defined(CONFIG_REQUIRES_FULL_LIBC)
char time_str[sizeof("1970-01-01T00:00:00")];
#if defined(CONFIG_POSIX_C_LANG_SUPPORT_R)
struct tm tm_timestamp = {0};
time_t time_seconds = total_seconds;
gmtime_r(&time_seconds, &tm_timestamp);
#if defined(CONFIG_REQUIRES_FULL_LIBC)
char time_str[sizeof("1970-01-01T00:00:00")];
strftime(time_str, sizeof(time_str), "%FT%T", &tm_timestamp);
length = print_formatted(output, "%s.%06uZ ",
time_str, ms * 1000U + us);
#else
struct YMD_date date;
get_YMD_from_seconds(total_seconds, &date);
hours = hours % 24;
#else /* CONFIG_REQUIRES_FULL_LIBC */
length = print_formatted(output,
"%04u-%02u-%02uT%02u:%02u:%02u.%06uZ ",
date.year, date.month, date.day,
hours, mins, seconds, ms * 1000U + us);
#endif
tm_timestamp.tm_year + 1900, tm_timestamp.tm_mon + 1,
tm_timestamp.tm_mday, tm_timestamp.tm_hour,
tm_timestamp.tm_min, tm_timestamp.tm_sec,
ms * 1000U + us);
#endif /* CONFIG_REQUIRES_FULL_LIBC */
#endif /* CONFIG_POSIX_C_LANG_SUPPORT_R */
} else if (IS_ENABLED(CONFIG_LOG_OUTPUT_FORMAT_CUSTOM_TIMESTAMP)) {
length = log_custom_timestamp_print(output, timestamp, print_formatted);
} else {
@ -265,50 +214,49 @@ static int timestamp_print(const struct log_output *output,
"[%5lu.%06d] ",
#endif
total_seconds, ms * 1000U + us);
#if defined(CONFIG_POSIX_C_LANG_SUPPORT_R)
} else if (IS_ENABLED(CONFIG_LOG_OUTPUT_FORMAT_DATE_TIMESTAMP)) {
#if defined(CONFIG_REQUIRES_FULL_LIBC)
char time_str[sizeof("1970-01-01 00:00:00")];
struct tm tm_timestamp = {0};
time_t time_seconds = total_seconds;
gmtime_r(&time_seconds, &tm_timestamp);
#if defined(CONFIG_REQUIRES_FULL_LIBC)
char time_str[sizeof("1970-01-01 00:00:00")];
strftime(time_str, sizeof(time_str), "%F %T", &tm_timestamp);
length = print_formatted(output, "[%s.%03u,%03u] ", time_str, ms,
us);
#else
struct YMD_date date;
get_YMD_from_seconds(total_seconds, &date);
hours = hours % 24;
#else /* CONFIG_REQUIRES_FULL_LIBC */
length = print_formatted(
output, "[%04u-%02u-%02u %02u:%02u:%02u.%03u,%03u] ",
date.year, date.month, date.day, hours, mins, seconds, ms,
us);
#endif
tm_timestamp.tm_year + 1900, tm_timestamp.tm_mon + 1,
tm_timestamp.tm_mday, tm_timestamp.tm_hour,
tm_timestamp.tm_min, tm_timestamp.tm_sec,
ms, us);
#endif /* CONFIG_REQUIRES_FULL_LIBC */
} else if (IS_ENABLED(CONFIG_LOG_OUTPUT_FORMAT_ISO8601_TIMESTAMP)) {
#if defined(CONFIG_REQUIRES_FULL_LIBC)
char time_str[sizeof("1970-01-01T00:00:00")];
struct tm tm_timestamp = {0};
time_t time_seconds = total_seconds;
gmtime_r(&time_seconds, &tm_timestamp);
#if defined(CONFIG_REQUIRES_FULL_LIBC)
char time_str[sizeof("1970-01-01T00:00:00")];
strftime(time_str, sizeof(time_str), "%FT%T", &tm_timestamp);
length = print_formatted(output, "[%s,%06uZ] ", time_str,
ms * 1000U + us);
#else
struct YMD_date date;
get_YMD_from_seconds(total_seconds, &date);
hours = hours % 24;
#else /* CONFIG_REQUIRES_FULL_LIBC */
length = print_formatted(output,
"[%04u-%02u-%02uT%02u:%02u:%02u,%06uZ] ",
date.year, date.month, date.day, hours,
mins, seconds, ms * 1000U + us);
#endif
tm_timestamp.tm_year + 1900,
tm_timestamp.tm_mon + 1,
tm_timestamp.tm_mday, tm_timestamp.tm_hour,
tm_timestamp.tm_min, tm_timestamp.tm_sec,
ms * 1000U + us);
#endif /* CONFIG_REQUIRES_FULL_LIBC */
#endif /* CONFIG_POSIX_C_LANG_SUPPORT_R */
} else {
length = print_formatted(output,
"[%02u:%02u:%02u.%03u,%03u] ",

View file

@ -22,6 +22,7 @@ tests:
extra_configs:
- CONFIG_LOG_TIMESTAMP_64BIT=y
- CONFIG_LOG_OUTPUT_FORMAT_DATE_TIMESTAMP=y
- CONFIG_POSIX_C_LANG_SUPPORT_R=y
logging.output.ts64.date.fulllibc:
tags:
- log_output
@ -29,6 +30,7 @@ tests:
extra_configs:
- CONFIG_LOG_TIMESTAMP_64BIT=y
- CONFIG_LOG_OUTPUT_FORMAT_DATE_TIMESTAMP=y
- CONFIG_POSIX_C_LANG_SUPPORT_R=y
- CONFIG_REQUIRES_FULL_LIBC=y
filter: CONFIG_FULL_LIBC_SUPPORTED
logging.output.ts64.iso8601:
@ -38,6 +40,7 @@ tests:
extra_configs:
- CONFIG_LOG_TIMESTAMP_64BIT=y
- CONFIG_LOG_OUTPUT_FORMAT_ISO8601_TIMESTAMP=y
- CONFIG_POSIX_C_LANG_SUPPORT_R=y
logging.output.ts64.iso8601.fulllibc:
tags:
- log_output
@ -45,6 +48,7 @@ tests:
extra_configs:
- CONFIG_LOG_TIMESTAMP_64BIT=y
- CONFIG_LOG_OUTPUT_FORMAT_ISO8601_TIMESTAMP=y
- CONFIG_POSIX_C_LANG_SUPPORT_R=y
- CONFIG_REQUIRES_FULL_LIBC=y
filter: CONFIG_FULL_LIBC_SUPPORTED
logging.output.thread_id:

View file

@ -13,3 +13,4 @@ CONFIG_LOG_MODE_DEFERRED=y
CONFIG_NET_SOCKETS=y
CONFIG_ENTROPY_GENERATOR=y
CONFIG_TEST_RANDOM_GENERATOR=y
CONFIG_POSIX_C_LANG_SUPPORT_R=y