From: Thomas Weißschuh Date: Tue, 27 Jun 2023 06:57:09 +0000 (+0200) Subject: lib/timeutils: implement timespec formatting X-Git-Tag: v2.40-rc1~350^2~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b9abaae31272d984d16a28edb0bcd42e2fd81f5d;p=thirdparty%2Futil-linux.git lib/timeutils: implement timespec formatting Signed-off-by: Thomas Weißschuh --- diff --git a/include/timeutils.h b/include/timeutils.h index f0a75a4a86..4257bd1eda 100644 --- a/include/timeutils.h +++ b/include/timeutils.h @@ -77,6 +77,7 @@ enum { int strtimeval_iso(const struct timeval *tv, int flags, char *buf, size_t bufsz); int strtm_iso(const struct tm *tm, int flags, char *buf, size_t bufsz); int strtime_iso(const time_t *t, int flags, char *buf, size_t bufsz); +int strtimespec_iso(const struct timespec *t, int flags, char *buf, size_t bufsz); #define UL_SHORTTIME_THISYEAR_HHMM (1 << 1) diff --git a/lib/timeutils.c b/lib/timeutils.c index 7cf0f76521..75126c0bd2 100644 --- a/lib/timeutils.c +++ b/lib/timeutils.c @@ -522,24 +522,35 @@ static int format_iso_time(const struct tm *tm, uint32_t nsec, int flags, char * return -1; } -/* timeval to ISO 8601 */ -int strtimeval_iso(const struct timeval *tv, int flags, char *buf, size_t bufsz) +/* timespec to ISO 8601 */ +int strtimespec_iso(const struct timespec *ts, int flags, char *buf, size_t bufsz) { struct tm tm; struct tm *rc; if (flags & ISO_GMTIME) - rc = gmtime_r(&tv->tv_sec, &tm); + rc = gmtime_r(&ts->tv_sec, &tm); else - rc = localtime_r(&tv->tv_sec, &tm); + rc = localtime_r(&ts->tv_sec, &tm); if (rc) - return format_iso_time(&tm, tv->tv_usec * NSEC_PER_USEC, flags, buf, bufsz); + return format_iso_time(&tm, ts->tv_nsec, flags, buf, bufsz); - warnx(_("time %"PRId64" is out of range."), (int64_t)(tv->tv_sec)); + warnx(_("time %"PRId64" is out of range."), (int64_t)(ts->tv_sec)); return -1; } +/* timeval to ISO 8601 */ +int strtimeval_iso(const struct timeval *tv, int flags, char *buf, size_t bufsz) +{ + struct timespec ts = { + .tv_sec = tv->tv_sec, + .tv_nsec = tv->tv_usec * NSEC_PER_USEC, + }; + + return strtimespec_iso(&ts, flags, buf, bufsz); +} + /* struct tm to ISO 8601 */ int strtm_iso(const struct tm *tm, int flags, char *buf, size_t bufsz) {