basic: add a size check to format timex members properly

As of glibc-2.34, the size of members in struct timex varies depending on
the _TIME_BITS macro.

Fixes: https://github.com/systemd/systemd/issues/21826
This commit is contained in:
Mike Gilbert 2021-12-19 19:39:37 -05:00 committed by Yu Watanabe
parent b9f27a0567
commit 9a723ed6e8
2 changed files with 5 additions and 2 deletions

View file

@ -468,6 +468,7 @@ conf.set('SIZEOF_DEV_T', cc.sizeof('dev_t', prefix : '#include <sys/types.h>'))
conf.set('SIZEOF_INO_T', cc.sizeof('ino_t', prefix : '#include <sys/types.h>'))
conf.set('SIZEOF_TIME_T', cc.sizeof('time_t', prefix : '#include <sys/time.h>'))
conf.set('SIZEOF_RLIM_T', cc.sizeof('rlim_t', prefix : '#include <sys/resource.h>'))
conf.set('SIZEOF_TIMEX_MEMBER', cc.sizeof('((struct timex *)0)->freq', prefix : '#include <sys/timex.h>'))
decl_headers = '''
#include <uchar.h>

View file

@ -26,10 +26,12 @@ assert_cc(sizeof(gid_t) == sizeof(uint32_t));
# error Unknown time_t size
#endif
#if defined __x86_64__ && defined __ILP32__
#if SIZEOF_TIMEX_MEMBER == 8
# define PRI_TIMEX PRIi64
#else
#elif SIZEOF_TIMEX_MEMBER == 4
# define PRI_TIMEX "li"
#else
# error Unknown timex member size
#endif
#if SIZEOF_RLIM_T == 8