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-20 12:36:59 +09:00
committed by Yu Watanabe
parent b9f27a0567
commit 9a723ed6e8
2 changed files with 5 additions and 2 deletions
+1
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>
+4 -2
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