aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukasz Majewski <lukma@denx.de>2020-01-16 23:44:59 +0100
committerLukasz Majewski <lukma@denx.de>2020-02-07 17:55:08 +0100
commit29bf83ccd75f865b0f551e7d10f18e6bb8d026bc (patch)
tree1ff84ec8a62d5713800357b32fa5a916538e60cc
parentebc2368121bf1932e530ef126b5a0765953e77ad (diff)
downloadglibc-29bf83ccd75f865b0f551e7d10f18e6bb8d026bc.tar
glibc-29bf83ccd75f865b0f551e7d10f18e6bb8d026bc.tar.gz
glibc-29bf83ccd75f865b0f551e7d10f18e6bb8d026bc.tar.bz2
glibc-29bf83ccd75f865b0f551e7d10f18e6bb8d026bc.zip
y2038: Provide conversion helpers for struct __timeval64
Those functions allow easy conversion between Y2038 safe, glibc internal struct __timeval64 and other time related data structures (like struct timeval or struct __timespec64). Build tests: ./src/scripts/build-many-glibcs.py glibcs Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
-rw-r--r--include/time.h49
1 files changed, 49 insertions, 0 deletions
diff --git a/include/time.h b/include/time.h
index e3afd6ed03..a80953d5dd 100644
--- a/include/time.h
+++ b/include/time.h
@@ -304,6 +304,43 @@ valid_timeval_to_timespec64 (const struct timeval tv)
return ts64;
}
+/* Convert a known valid struct timeval into a struct __timeval64. */
+static inline struct __timeval64
+valid_timeval_to_timeval64 (const struct timeval tv)
+{
+ struct __timeval64 tv64;
+
+ tv64.tv_sec = tv.tv_sec;
+ tv64.tv_usec = tv.tv_usec;
+
+ return tv64;
+}
+
+/* Convert a valid and within range of struct timeval, struct
+ __timeval64 into a struct timeval. */
+static inline struct timeval
+valid_timeval64_to_timeval (const struct __timeval64 tv64)
+{
+ struct timeval tv;
+
+ tv.tv_sec = (time_t) tv64.tv_sec;
+ tv.tv_usec = (suseconds_t) tv64.tv_usec;
+
+ return tv;
+}
+
+/* Convert a struct __timeval64 into a struct __timespec64. */
+static inline struct __timespec64
+timeval64_to_timespec64 (const struct __timeval64 tv64)
+{
+ struct __timespec64 ts64;
+
+ ts64.tv_sec = tv64.tv_sec;
+ ts64.tv_nsec = tv64.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)
@@ -342,6 +379,18 @@ valid_timespec64_to_timeval (const struct __timespec64 ts64)
return tv;
}
+/* Convert a struct __timespec64 into a struct __timeval64. */
+static inline struct __timeval64
+timespec64_to_timeval64 (const struct __timespec64 ts64)
+{
+ struct __timeval64 tv64;
+
+ tv64.tv_sec = ts64.tv_sec;
+ tv64.tv_usec = ts64.tv_nsec / 1000;
+
+ return tv64;
+}
+
/* Check if a value is in the valid nanoseconds range. Return true if
it is, false otherwise. */
static inline bool