mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-29 11:41:21 +03:00
y2038: Provide conversion helpers for struct __timex64
Those functions allow easy conversion between Y2038 safe, glibc internal struct __timex64 and struct timex. Those functions are put in Linux specific sys/timex.h file, as putting them into glibc's local include/time.h would cause build break on HURD as it doesn't support struct timex related syscalls. 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>
This commit is contained in:
@ -25,6 +25,7 @@
|
||||
|
||||
libc_hidden_proto (__adjtimex)
|
||||
|
||||
# include <time.h>
|
||||
# include <struct___timeval64.h>
|
||||
/* Local definition of 64 bit time supporting timex struct */
|
||||
# if __TIMESIZE == 64
|
||||
@ -71,5 +72,65 @@ struct __timex64
|
||||
int :32;
|
||||
};
|
||||
# endif
|
||||
|
||||
/* Convert a known valid struct timex into a struct __timex64. */
|
||||
static inline struct __timex64
|
||||
valid_timex_to_timex64 (const struct timex tx)
|
||||
{
|
||||
struct __timex64 tx64;
|
||||
|
||||
tx64.modes = tx.modes;
|
||||
tx64.offset = tx.offset;
|
||||
tx64.freq = tx.freq;
|
||||
tx64.maxerror = tx.maxerror;
|
||||
tx64.esterror = tx.esterror;
|
||||
tx64.status = tx.status;
|
||||
tx64.constant = tx.constant;
|
||||
tx64.precision = tx.precision;
|
||||
tx64.tolerance = tx.tolerance;
|
||||
tx64.time = valid_timeval_to_timeval64 (tx.time);
|
||||
tx64.tick = tx.tick;
|
||||
tx64.ppsfreq = tx.ppsfreq;
|
||||
tx64.jitter = tx.jitter;
|
||||
tx64.shift = tx.shift;
|
||||
tx64.stabil = tx.stabil;
|
||||
tx64.jitcnt = tx.jitcnt;
|
||||
tx64.calcnt = tx.calcnt;
|
||||
tx64.errcnt = tx.errcnt;
|
||||
tx64.stbcnt = tx.stbcnt;
|
||||
tx64.tai = tx.tai;
|
||||
|
||||
return tx64;
|
||||
}
|
||||
|
||||
/* Convert a known valid struct __timex64 into a struct timex. */
|
||||
static inline struct timex
|
||||
valid_timex64_to_timex (const struct __timex64 tx64)
|
||||
{
|
||||
struct timex tx;
|
||||
|
||||
tx.modes = tx64.modes;
|
||||
tx.offset = tx64.offset;
|
||||
tx.freq = tx64.freq;
|
||||
tx.maxerror = tx64.maxerror;
|
||||
tx.esterror = tx64.esterror;
|
||||
tx.status = tx64.status;
|
||||
tx.constant = tx64.constant;
|
||||
tx.precision = tx64.precision;
|
||||
tx.tolerance = tx64.tolerance;
|
||||
tx.time = valid_timeval64_to_timeval (tx64.time);
|
||||
tx.tick = tx64.tick;
|
||||
tx.ppsfreq = tx64.ppsfreq;
|
||||
tx.jitter = tx64.jitter;
|
||||
tx.shift = tx64.shift;
|
||||
tx.stabil = tx64.stabil;
|
||||
tx.jitcnt = tx64.jitcnt;
|
||||
tx.calcnt = tx64.calcnt;
|
||||
tx.errcnt = tx64.errcnt;
|
||||
tx.stbcnt = tx64.stbcnt;
|
||||
tx.tai = tx64.tai;
|
||||
|
||||
return tx;
|
||||
}
|
||||
# endif /* _ISOMAC */
|
||||
#endif /* sys/timex.h */
|
||||
|
Reference in New Issue
Block a user