Re: [PATCH] t4212: handle systems with post-apocalyptic gmtime
- From
Jeff King <peff@peff.net>
- Date
- Apr 1, 2014, 19:46 UTC
- Message-ID
- <20140401194606.GA20676@sigill.intra.peff.net>
- In-Reply-To
- <xmqqbnwk27it.fsf@gitster.dls.corp.google.com>
On Tue, Apr 01, 2014 at 12:07:22PM -0700, Junio C Hamano wrote:
Show 23 quoted lines
> Jeff King <peff@peff.net> writes: > > > On Fri, Mar 28, 2014 at 12:30:02PM -0700, Junio C Hamano wrote: > > > >> Let's just deal with a simple known cases (like FreeBSD) in the real > >> code that everybody exercises at runtime, and have the new test only > >> check we do not segfault on a value we used to segfault upon seeing. > > > > OK. Here it is, with the other option as an "alt" patch for reference. > > > > [1/2]: date: recognize bogus FreeBSD gmtime output > > [2/2]: t4212: loosen far-in-future test for AIX > > [2alt/2]: work around unreliable gmtime errors on AIX > > > > -Peff > > Thanks. 2alt does not look too bad, but on the other hand, we are > replacing a value that can produce the right result on correctly > implemented gmtime with a completely bogus value only because we > know there exists one broken implementation---which does not sound a > very good trade-off, given that we would get a result that does not > correspond to the input anyway with or without the change on the > broken implementation.
One other option is to push _all_ callers through a git_gmtime() wrapper, and then use Makefile knobs to turn on specific quirks, like:
struct tm *git_gmtime_r(const time_t *timep, struct tm *result)
{
#ifdef GMTIME_OVERFLOWS_32BIT
if (*timep > 999999999999999)
return NULL;
#endifret = gmtime_r(timep, result);
#ifdef GMTIME_ERROR_BLANK
if (ret && !ret->tm_mday)
return NULL;
#endif return ret;
}and then each platform can turn the knobs as appropriate.
-Peff