From: Michael Tremer Date: Fri, 7 Feb 2025 11:39:02 +0000 (+0000) Subject: util: Add function to format timeval to ISO 8601 format X-Git-Tag: 0.9.30~101 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b88d963f6a4506717d7a8bfd4a6118b86da5eae4;p=pakfire.git util: Add function to format timeval to ISO 8601 format Signed-off-by: Michael Tremer --- diff --git a/src/pakfire/string.c b/src/pakfire/string.c index edd4211d..4bca3ee8 100644 --- a/src/pakfire/string.c +++ b/src/pakfire/string.c @@ -672,6 +672,18 @@ int __pakfire_format_time(char* buffer, const size_t length, const time_t t) { } #pragma GCC diagnostic pop +int __pakfire_timeval_to_iso8601(char* buffer, const size_t length, const struct timeval* t) { + struct tm tm = {}; + + // Convert to broken down time + if (!gmtime_r(&t->tv_sec, &tm)) + return -errno; + + return __pakfire_string_format(buffer, length, "%04d-%02d-%02dT%02d:%02d:%02d.%03ldZ", + tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec, + US_TO_MS(t->tv_usec)); +} + char* pakfire_string_format_interval(const time_t t) { char* buffer = NULL; int r; diff --git a/src/pakfire/string.h b/src/pakfire/string.h index b7fd8d65..33a6ce6b 100644 --- a/src/pakfire/string.h +++ b/src/pakfire/string.h @@ -135,6 +135,10 @@ int __pakfire_strftime_now(char* buffer, const size_t length, const char* format __pakfire_format_time(buffer, sizeof(buffer), t) int __pakfire_format_time(char* buffer, const size_t length, const time_t t); +#define pakfire_timeval_to_iso8601(buffer, t) \ + __pakfire_timeval_to_iso8601(buffer, sizeof(buffer), t) +int __pakfire_timeval_to_iso8601(char* buffer, const size_t length, const struct timeval* t); + size_t pakfire_string_parse_bytes(const char* s); char* pakfire_string_format_interval(const time_t t); diff --git a/src/pakfire/util.h b/src/pakfire/util.h index 86b9bf76..06f6dc27 100644 --- a/src/pakfire/util.h +++ b/src/pakfire/util.h @@ -110,6 +110,8 @@ int pakfire_copy(struct pakfire_ctx* ctx, FILE* src, FILE* dst); #define US_TO_S(s) (s / 1000000) #define NS_TO_S(s) (s / 1000000000) +#define US_TO_MS(us) (us / 1000) + static inline double pakfire_timespec_delta(struct timespec* t1, struct timespec* t2) { // Compute delta in seconds return (