mirror of
https://github.com/git/git.git
synced 2026-01-10 10:13:33 +00:00
timestamp_t: a new data type for timestamps
Git's source code assumes that unsigned long is at least as precise as time_t. Which is incorrect, and causes a lot of problems, in particular where unsigned long is only 32-bit (notably on Windows, even in 64-bit versions). So let's just use a more appropriate data type instead. In preparation for this, we introduce the new `timestamp_t` data type. By necessity, this is a very, very large patch, as it has to replace all timestamps' data type in one go. As we will use a data type that is not necessarily identical to `time_t`, we need to be very careful to use `time_t` whenever we interact with the system functions, and `timestamp_t` everywhere else. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
cb71f8bdb5
commit
dddbad728c
@@ -545,9 +545,17 @@ static void write_zip_trailer(const unsigned char *sha1)
|
||||
write_or_die(1, sha1_to_hex(sha1), GIT_SHA1_HEXSZ);
|
||||
}
|
||||
|
||||
static void dos_time(time_t *time, int *dos_date, int *dos_time)
|
||||
static void dos_time(timestamp_t *timestamp, int *dos_date, int *dos_time)
|
||||
{
|
||||
struct tm *t = localtime(time);
|
||||
time_t time;
|
||||
struct tm *t;
|
||||
|
||||
if (date_overflows(*timestamp))
|
||||
die("timestamp too large for this system: %"PRItime,
|
||||
*timestamp);
|
||||
time = (time_t)*timestamp;
|
||||
t = localtime(&time);
|
||||
*timestamp = time;
|
||||
|
||||
*dos_date = t->tm_mday + (t->tm_mon + 1) * 32 +
|
||||
(t->tm_year + 1900 - 1980) * 512;
|
||||
|
||||
Reference in New Issue
Block a user