Commit 14eb94ee by Vicent Marti

Fix `gmtime` issues in Win32

parent 8416c9ad
......@@ -68,18 +68,32 @@ git_signature *git_signature_dup(const git_signature *sig)
git_signature *git_signature_now(const char *name, const char *email)
{
time_t now;
struct tm utc_tm, local_tm;
int offset;
struct tm *utc_tm, *local_tm;
time(&now);
#ifndef GIT_WIN32
struct tm _utc, _local;
#endif
gmtime_r(&now, &utc_tm);
localtime_r(&now, &local_tm);
time(&now);
offset = mktime(&local_tm) - mktime(&utc_tm);
/**
* On Win32, `gmtime_r` doesn't exist but
* `gmtime` is threadsafe, so we can use that
*/
#ifdef GIT_WIN32
utc_tm = gmtime(&now);
local_tm = localtime(&now);
#else
utc_tm = gmtime_r(&now, &_utc);
local_tm = localtime_r(&now, &_local);
#endif
offset = mktime(local_tm) - mktime(utc_tm);
offset /= 60;
/* mktime takes care of setting tm_isdst correctly */
if (local_tm.tm_isdst)
if (local_tm->tm_isdst)
offset += 60;
return git_signature_new(name, email, now, offset);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment