[PATCH] Return proper error valud from "parse_date()"
Right now we don't return any error value at all from parse_date(), and if we can't parse it, we just silently leave the result buffer unchanged. That's fine for the current user, which will always default to the current date, but it's a crappy interface, and we might well be better off with an error message rather than just the default date. So let's change the thing to return a negative value if an error occurs, and the length of the result otherwise (snprintf behaviour: if the buffer is too small, it returns how big it _would_ have been). [ I started looking at this in case we could support date-based revision names. Looks ugly. Would have to parse relative dates.. ] Signed-off-by: Linus Torvalds <torvalds@osdl.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
b0391890d2
commit
2a39064c65
2
cache.h
2
cache.h
@ -242,7 +242,7 @@ extern void *read_object_with_reference(const unsigned char *sha1,
|
|||||||
unsigned char *sha1_ret);
|
unsigned char *sha1_ret);
|
||||||
|
|
||||||
const char *show_date(unsigned long time, int timezone);
|
const char *show_date(unsigned long time, int timezone);
|
||||||
void parse_date(const char *date, char *buf, int bufsize);
|
int parse_date(const char *date, char *buf, int bufsize);
|
||||||
void datestamp(char *buf, int bufsize);
|
void datestamp(char *buf, int bufsize);
|
||||||
|
|
||||||
extern int setup_ident(void);
|
extern int setup_ident(void);
|
||||||
|
6
date.c
6
date.c
@ -388,7 +388,7 @@ static int match_tz(const char *date, int *offp)
|
|||||||
|
|
||||||
/* Gr. strptime is crap for this; it doesn't have a way to require RFC2822
|
/* 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. */
|
(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;
|
struct tm tm;
|
||||||
int offset, sign, tm_gmt;
|
int offset, sign, tm_gmt;
|
||||||
@ -431,7 +431,7 @@ void parse_date(const char *date, char *result, int maxlen)
|
|||||||
offset = (then - mktime(&tm)) / 60;
|
offset = (then - mktime(&tm)) / 60;
|
||||||
|
|
||||||
if (then == -1)
|
if (then == -1)
|
||||||
return;
|
return -1;
|
||||||
|
|
||||||
if (!tm_gmt)
|
if (!tm_gmt)
|
||||||
then -= offset * 60;
|
then -= offset * 60;
|
||||||
@ -442,7 +442,7 @@ void parse_date(const char *date, char *result, int maxlen)
|
|||||||
sign = '-';
|
sign = '-';
|
||||||
}
|
}
|
||||||
|
|
||||||
snprintf(result, maxlen, "%lu %c%02d%02d", then, sign, offset/60, offset % 60);
|
return snprintf(result, maxlen, "%lu %c%02d%02d", then, sign, offset/60, offset % 60);
|
||||||
}
|
}
|
||||||
|
|
||||||
void datestamp(char *buf, int bufsize)
|
void datestamp(char *buf, int bufsize)
|
||||||
|
Loading…
Reference in New Issue
Block a user