]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
y2038: Provide conversion helpers for struct __timespec64
authorLukasz Majewski <lukma@denx.de>
Mon, 25 Mar 2019 07:38:02 +0000 (08:38 +0100)
committerLukasz Majewski <lukma@denx.de>
Mon, 30 Sep 2019 22:12:29 +0000 (00:12 +0200)
Those functions allow easy conversion between Y2038 safe struct
__timespec64 and other time related data structures (like struct timeval
or struct timespec).

* include/time.h (valid_timeval_to_timespec64): Add.
* include/time.h (valid_timespec_to_timespec64): Likewise.
* include/time.h (valid_timespec64_to_timespec): Likewise.
* include/time.h (valid_timespec64_to_timeval): Likewise.

ChangeLog
include/time.h

index 17391d67e53d399e768babacdd98f2b0c0c03127..54288d2db81c43bfaf6db260d14149a513158872 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2019-10-01  Lukasz Majewski <lukma@denx.de>
+
+       * include/time.h (valid_timeval_to_timespec64): Add.
+       * include/time.h (valid_timespec_to_timespec64): Likewise.
+       * include/time.h (valid_timespec64_to_timespec): Likewise.
+       * include/time.h (valid_timespec64_to_timeval): Likewise.
+
 2019-09-30  Joseph Myers  <joseph@codesourcery.com>
 
        * sysdeps/unix/sysv/linux/powerpc/bits/mman.h [__USE_MISC]
index 9727786634a5a274ce7de5c9ac0c9d55213fa907..9878c2b2cac23931a6b3800a58e2f06ec0ac8316 100644 (file)
@@ -178,5 +178,54 @@ in_time_t_range (__time64_t t)
   return s == t;
 }
 
+/* Convert a known valid struct timeval into a struct __timespec64.  */
+static inline struct __timespec64
+valid_timeval_to_timespec64 (const struct timeval tv)
+{
+  struct __timespec64 ts64;
+
+  ts64.tv_sec = tv.tv_sec;
+  ts64.tv_nsec = tv.tv_usec * 1000;
+
+  return ts64;
+}
+
+/* Convert a known valid struct timespec into a struct __timespec64.  */
+static inline struct __timespec64
+valid_timespec_to_timespec64 (const struct timespec ts)
+{
+  struct __timespec64 ts64;
+
+  ts64.tv_sec = ts.tv_sec;
+  ts64.tv_nsec = ts.tv_nsec;
+
+  return ts64;
+}
+
+/* Convert a valid and within range of struct timespec, struct
+   __timespec64 into a struct timespec.  */
+static inline struct timespec
+valid_timespec64_to_timespec (const struct __timespec64 ts64)
+{
+  struct timespec ts;
+
+  ts.tv_sec = (time_t) ts64.tv_sec;
+  ts.tv_nsec = ts64.tv_nsec;
+
+  return ts;
+}
+
+/* Convert a valid and within range of struct timeval struct
+   __timespec64 into a struct timeval.  */
+static inline struct timeval
+valid_timespec64_to_timeval (const struct __timespec64 ts64)
+{
+  struct timeval tv;
+
+  tv.tv_sec = (time_t) ts64.tv_sec;
+  tv.tv_usec = ts64.tv_nsec / 1000;
+
+  return tv;
+}
 #endif
 #endif