mirror of
https://git.proxmox.com/git/libgit2
synced 2025-08-13 21:29:14 +00:00
Merge pull request #905 from carlosmn/signature-now
signature: make the OS give us the offset for git_signature_now
This commit is contained in:
commit
319ad0ba20
@ -125,24 +125,26 @@ int git_signature_now(git_signature **sig_out, const char *name, const char *ema
|
||||
{
|
||||
time_t now;
|
||||
time_t offset;
|
||||
struct tm *utc_tm, *local_tm;
|
||||
struct tm *utc_tm;
|
||||
git_signature *sig;
|
||||
struct tm _utc, _local;
|
||||
struct tm _utc;
|
||||
|
||||
*sig_out = NULL;
|
||||
|
||||
/*
|
||||
* Get the current time as seconds since the epoch and
|
||||
* transform that into a tm struct containing the time at
|
||||
* UTC. Give that to mktime which considers it a local time
|
||||
* (tm_isdst = -1 asks it to take DST into account) and gives
|
||||
* us that time as seconds since the epoch. The difference
|
||||
* between its return value and 'now' is our offset to UTC.
|
||||
*/
|
||||
time(&now);
|
||||
|
||||
utc_tm = p_gmtime_r(&now, &_utc);
|
||||
local_tm = p_localtime_r(&now, &_local);
|
||||
|
||||
offset = mktime(local_tm) - mktime(utc_tm);
|
||||
utc_tm->tm_isdst = -1;
|
||||
offset = difftime(now, mktime(utc_tm));
|
||||
offset /= 60;
|
||||
|
||||
/* mktime takes care of setting tm_isdst correctly */
|
||||
if (local_tm->tm_isdst)
|
||||
offset += 60;
|
||||
|
||||
if (git_signature_new(&sig, name, email, now, (int)offset) < 0)
|
||||
return -1;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user