From 69fd157a3dedf6c924c19738961083e80422258d Mon Sep 17 00:00:00 2001 From: Alistair Francis Date: Wed, 18 Sep 2019 16:51:23 -0700 Subject: [PATCH] time: Add padding for the timespec if required If we are running on a 32-bit system with a 64-bit time_t we need to ensure there is padding around the tv_nsec variable. This is requried as the timespec is #defined to the __timespec64 struct. * time/bits/types/struct_timespec.h: Add padding for the timespec if required. --- ChangeLog | 5 +++++ time/bits/types/struct_timespec.h | 13 +++++++++++++ 2 files changed, 18 insertions(+) diff --git a/ChangeLog b/ChangeLog index 17ff0ade2c..23dc785f30 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2019-10-01 Alistair Francis + + * time/bits/types/struct_timespec.h: Add padding for the timespec if + required. + 2019-10-01 Zack Weinberg Alistair Francis diff --git a/time/bits/types/struct_timespec.h b/time/bits/types/struct_timespec.h index 5b77c52b4f..d11c69cfd3 100644 --- a/time/bits/types/struct_timespec.h +++ b/time/bits/types/struct_timespec.h @@ -3,13 +3,26 @@ #define _STRUCT_TIMESPEC 1 #include +#include /* POSIX.1b structure for a time value. This is like a `struct timeval' but has nanoseconds instead of microseconds. */ struct timespec { __time_t tv_sec; /* Seconds. */ +#if __WORDSIZE == 64 \ + || (defined __SYSCALL_WORDSIZE && __SYSCALL_WORDSIZE == 64) \ + || __TIMESIZE == 32 __syscall_slong_t tv_nsec; /* Nanoseconds. */ +#else +# if __BYTE_ORDER == __BIG_ENDIAN + int: 32; /* Padding. */ + long int tv_nsec; /* Nanoseconds. */ +# else + long int tv_nsec; /* Nanoseconds. */ + int: 32; /* Padding. */ +# endif +#endif }; #endif