 6654754779
			
		
	
	6654754779
	
	
	
		
			
			Most gmtime implementations return a NULL value when they encounter an error (and this behavior is specified by ANSI C and POSIX). FreeBSD's implementation, however, will simply leave the "struct tm" untouched. Let's also recognize this and convert it to a NULL (with this patch, t4212 should pass on FreeBSD). Reported-by: René Scharfe <l.s.r@web.de> Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
		
			
				
	
	
		
			30 lines
		
	
	
		
			605 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			30 lines
		
	
	
		
			605 B
		
	
	
	
		
			C
		
	
	
	
	
	
| #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;
 | |
| 
 | |
| 	memset(result, 0, sizeof(*result));
 | |
| 	ret = gmtime_r(timep, result);
 | |
| 
 | |
| 	/*
 | |
| 	 * Rather than NULL, FreeBSD gmtime simply leaves the "struct tm"
 | |
| 	 * untouched when it encounters overflow. Since "mday" cannot otherwise
 | |
| 	 * be zero, we can test this very quickly.
 | |
| 	 */
 | |
| 	if (ret && !ret->tm_mday) {
 | |
| 		ret = NULL;
 | |
| 		errno = EOVERFLOW;
 | |
| 	}
 | |
| 
 | |
| 	return ret;
 | |
| }
 |