]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
lib/timeutils: implement timespec formatting
authorThomas Weißschuh <thomas@t-8ch.de>
Tue, 27 Jun 2023 06:57:09 +0000 (08:57 +0200)
committerThomas Weißschuh <thomas@t-8ch.de>
Wed, 28 Jun 2023 12:58:32 +0000 (14:58 +0200)
Signed-off-by: Thomas Weißschuh <thomas@t-8ch.de>
include/timeutils.h
lib/timeutils.c

index f0a75a4a86c42f02971624e024478805cfe47d46..4257bd1edad46da9c37c9451a7f93e05c9712318 100644 (file)
@@ -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)
 
index 7cf0f76521a4af377e4c116bd2a48431a7768635..75126c0bd2bc6925653a1f30b855267f635cfee4 100644 (file)
@@ -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)
 {