]> git.ipfire.org Git - thirdparty/git.git/commitdiff
use uintmax_t for timestamps
authorJohannes Schindelin <johannes.schindelin@gmx.de>
Wed, 26 Apr 2017 19:29:42 +0000 (21:29 +0200)
committerJunio C Hamano <gitster@pobox.com>
Thu, 27 Apr 2017 04:07:40 +0000 (13:07 +0900)
Previously, we used `unsigned long` for timestamps. This was only a good
choice on Linux, where we know implicitly that `unsigned long` is what is
used for `time_t`.

However, we want to use a different data type for timestamps for two
reasons:

- there is nothing that says that `unsigned long` should be the same data
  type as `time_t`, and indeed, on 64-bit Windows for example, it is not:
  `unsigned long` is 32-bit but `time_t` is 64-bit.

- even on 32-bit Linux, where `unsigned long` (and thereby `time_t`) is
  32-bit, we *want* to be able to encode timestamps in Git that are
  currently absurdly far in the future, *even if* the system library is
  not able to format those timestamps into date strings.

So let's just switch to the maximal integer type available, which should
be at least 64-bit for all practical purposes these days. It certainly
cannot be worse than `unsigned long`, so...

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
git-compat-util.h

index 72c12173a1488981fee6c93912a3705fc363d94a..f8349a03bde5dd984c23bfbc7a053ab4848f8b6e 100644 (file)
@@ -319,10 +319,10 @@ extern char *gitdirname(char *);
 #define PRIo32 "o"
 #endif
 
-typedef unsigned long timestamp_t;
-#define PRItime "lu"
-#define parse_timestamp strtoul
-#define TIME_MAX ULONG_MAX
+typedef uintmax_t timestamp_t;
+#define PRItime PRIuMAX
+#define parse_timestamp strtoumax
+#define TIME_MAX UINTMAX_MAX
 
 #ifndef PATH_SEP
 #define PATH_SEP ':'