[RFC 12/12] y2038: Convert timespec_* from posix-timer.h to be Y2038 safe

Lukasz Majewski lukma@denx.de
Mon Jun 1 14:07:40 GMT 2020


Static inline functions - timespec_compare, timespec_sum and
timespec_diff - from ./sysdeps/pthread/posix-timer.h have been
converted to support 64 bit time on ports with __WORDSIZE == 32
&& __TIMESIZE != 64.
The change was focused on using struct __timespec64.

Tested with glibc/glibc-many-build --keep failed glibcs
---
 sysdeps/pthread/posix-timer.h | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/sysdeps/pthread/posix-timer.h b/sysdeps/pthread/posix-timer.h
index 312cf2b3bd..f6572480c9 100644
--- a/sysdeps/pthread/posix-timer.h
+++ b/sysdeps/pthread/posix-timer.h
@@ -115,7 +115,8 @@ timer_delref (struct timer_node *timer)
 /* Timespec helper routines.  */
 static inline int
 __attribute ((always_inline))
-__timespec_compare (const struct timespec *left, const struct timespec *right)
+__timespec_compare (const struct __timespec64 *left,
+                    const struct __timespec64 *right)
 {
   if (left->tv_sec < right->tv_sec)
     return -1;
@@ -131,8 +132,8 @@ __timespec_compare (const struct timespec *left, const struct timespec *right)
 }
 
 static inline void
-__timespec_add (struct timespec *sum, const struct timespec *left,
-                const struct timespec *right)
+__timespec_add (struct __timespec64 *sum, const struct __timespec64 *left,
+                const struct __timespec64 *right)
 {
   sum->tv_sec = left->tv_sec + right->tv_sec;
   sum->tv_nsec = left->tv_nsec + right->tv_nsec;
@@ -145,8 +146,8 @@ __timespec_add (struct timespec *sum, const struct timespec *left,
 }
 
 static inline void
-__timespec_sub (struct timespec *diff, const struct timespec *left,
-                const struct timespec *right)
+__timespec_sub (struct __timespec64 *diff, const struct __timespec64 *left,
+                const struct __timespec64 *right)
 {
   diff->tv_sec = left->tv_sec - right->tv_sec;
   diff->tv_nsec = left->tv_nsec - right->tv_nsec;
-- 
2.20.1



More information about the Libc-alpha mailing list