summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/basic/time-util.h2
-rw-r--r--src/test/test-time.c10
2 files changed, 11 insertions, 1 deletions
diff --git a/src/basic/time-util.h b/src/basic/time-util.h
index b37d5ad5dc..9c7758a959 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 ca44f81f9c..254a8d0e52 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;
}