diff options
author | Lukasz Majewski <lukma@denx.de> | 2020-01-16 23:44:59 +0100 |
---|---|---|
committer | Lukasz Majewski <lukma@denx.de> | 2020-02-07 17:55:08 +0100 |
commit | 29bf83ccd75f865b0f551e7d10f18e6bb8d026bc (patch) | |
tree | 1ff84ec8a62d5713800357b32fa5a916538e60cc | |
parent | ebc2368121bf1932e530ef126b5a0765953e77ad (diff) | |
download | glibc-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.h | 49 |
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 |