Subject: Re: [PATCH 1/2] date: recognize bogus FreeBSD gmtime output

From: René Scharfe <[email-masked]>
Date: Tue, 01 Apr 2014 19:42:30 +0200

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é