From: Lennart Poettering Date: Wed, 3 Feb 2016 20:05:59 +0000 (+0100) Subject: util: add check that makes sure time_t and TIME_T_MAX work the way we assume they do X-Git-Tag: v231~680^2~8 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2d60169dd60d503712d5c2e81a01158e82e636e6;p=platform%2Fupstream%2Fsystemd.git util: add check that makes sure time_t and TIME_T_MAX work the way we assume they do --- diff --git a/src/basic/time-util.h b/src/basic/time-util.h index b37d5ad..9c7758a 100644 --- a/src/basic/time-util.h +++ b/src/basic/time-util.h @@ -69,7 +69,7 @@ typedef struct dual_timestamp { #define FORMAT_TIMESTAMP_RELATIVE_MAX 256 #define FORMAT_TIMESPAN_MAX 64 -#define TIME_T_MAX (time_t)((1UL << ((sizeof(time_t) << 3) - 1)) - 1) +#define TIME_T_MAX (time_t)((UINTMAX_C(1) << ((sizeof(time_t) << 3) - 1)) - 1) #define DUAL_TIMESTAMP_NULL ((struct dual_timestamp) { 0ULL, 0ULL }) diff --git a/src/test/test-time.c b/src/test/test-time.c index ca44f81..254a8d0 100644 --- a/src/test/test-time.c +++ b/src/test/test-time.c @@ -192,6 +192,8 @@ static void test_usec_add(void) { } int main(int argc, char *argv[]) { + uintmax_t x; + test_parse_sec(); test_parse_time(); test_parse_nsec(); @@ -202,5 +204,13 @@ int main(int argc, char *argv[]) { test_get_timezones(); test_usec_add(); + /* Ensure time_t is signed */ + assert_cc((time_t) -1 < (time_t) 1); + + /* Ensure TIME_T_MAX works correctly */ + x = (uintmax_t) TIME_T_MAX; + x ++; + assert((time_t) x < 0); + return 0; }