X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=date.c;h=63f5a0919768112c0d3301e7afaa59edcce7da36;hb=ad4f4daae80cb00000aca76e1528add6daf8f033;hp=b46f2ce344d53585901820b39dffc8cb4c631364;hpb=07ee0d77c66d6f356cd3f82435e67510779aa53c;p=git.git diff --git a/date.c b/date.c index b46f2ce3..63f5a091 100644 --- a/date.c +++ b/date.c @@ -4,7 +4,6 @@ * Copyright (C) Linus Torvalds, 2005 */ -#include #include #include "cache.h" @@ -386,12 +385,23 @@ static int match_tz(const char *date, int *offp) return end - date; } +static int date_string(unsigned long date, int offset, char *buf, int len) +{ + int sign = '+'; + + if (offset < 0) { + offset = -offset; + sign = '-'; + } + return snprintf(buf, len, "%lu %c%02d%02d", date, sign, offset / 60, offset % 60); +} + /* Gr. strptime is crap for this; it doesn't have a way to require RFC2822 (i.e. English) day/month names, and it doesn't work correctly with %z. */ -void parse_date(const char *date, char *result, int maxlen) +int parse_date(const char *date, char *result, int maxlen) { struct tm tm; - int offset, sign, tm_gmt; + int offset, tm_gmt; time_t then; memset(&tm, 0, sizeof(tm)); @@ -431,18 +441,11 @@ void parse_date(const char *date, char *result, int maxlen) offset = (then - mktime(&tm)) / 60; if (then == -1) - return; + return -1; if (!tm_gmt) then -= offset * 60; - - sign = '+'; - if (offset < 0) { - offset = -offset; - sign = '-'; - } - - snprintf(result, maxlen, "%lu %c%02d%02d", then, sign, offset/60, offset % 60); + return date_string(then, offset, result, maxlen); } void datestamp(char *buf, int bufsize) @@ -455,5 +458,5 @@ void datestamp(char *buf, int bufsize) offset = my_mktime(localtime(&now)) - now; offset /= 60; - snprintf(buf, bufsize, "%lu %+05d", now, offset/60*100 + offset%60); + date_string(now, offset, buf, bufsize); }