From: René Scharfe Date: Tue, 01 Apr 2014 17:42:30 GMT Subject: Re: [PATCH 1/2] date: recognize bogus FreeBSD gmtime output Message-ID: <533AFA86.2090905@web.de> In-Reply-To: <20140401074251.GA22550@sigill.intra.peff.net> Am 01.04.2014 09:42, schrieb Jeff King: > diff --git a/compat/gmtime.c b/compat/gmtime.c > new file mode 100644 > index 0000000..ffcabf4 > --- /dev/null > +++ b/compat/gmtime.c > @@ -0,0 +1,26 @@ > +#include "../git-compat-util.h" > +#undef gmtime > +#undef gmtime_r > + > +struct tm *git_gmtime(const time_t *timep) > +{ > + static struct tm result; > + return git_gmtime_r(timep, &result); > +} > + > +struct tm *git_gmtime_r(const time_t *timep, struct tm *result) > +{ > + struct tm *ret; > + > + ret = gmtime_r(timep, result); > + > + /* > + * Rather than NULL, FreeBSD gmtime will return a "struct tm" with all > + * fields zeroed. Since "mday" cannot otherwise be zero, we can test > + * this very quickly. > + */ > + if (ret && !ret->tm_mday) > + ret = NULL; > + > + return ret; > +} http://pubs.opengroup.org/onlinepubs/009695399/functions/gmtime.html says that errno shall be set on error and only mentions EOVERFLOW as a possible error code. René