Skip to content

Commit

Permalink
[PATCH] Return proper error valud from "parse_date()"
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Linus Torvalds authored and Junio C Hamano committed Sep 20, 2005
1 parent b039189 commit 2a39064
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 4 deletions.
2 changes: 1 addition & 1 deletion cache.h
Original file line number Diff line number Diff line change
Expand Up @@ -242,7 +242,7 @@ extern void *read_object_with_reference(const unsigned char *sha1,
unsigned char *sha1_ret);

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);

extern int setup_ident(void);
Expand Down
6 changes: 3 additions & 3 deletions date.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
(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;
Expand Down Expand Up @@ -431,7 +431,7 @@ 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;
Expand All @@ -442,7 +442,7 @@ void parse_date(const char *date, char *result, int maxlen)
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)
Expand Down

0 comments on commit 2a39064

Please sign in to comment.