X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=date.c;h=c116bbd5f432f54dfa41b6aa991a0caccdd0b972;hp=0f217e44134b5567cbf401b32c7fdf0a48fd3d93;hb=ef944693c354eb1e7ec6c578a0f4c14616fc6d60;hpb=f638fbf8d6c5c3dada648edf974a410c3ca7ace5 diff --git a/date.c b/date.c index 0f217e44..c116bbd5 100644 --- a/date.c +++ b/date.c @@ -27,6 +27,8 @@ #include +#include /* For g_ascii_strncasecmp only. */ + #ifndef FALSE #define FALSE 0 #endif @@ -75,7 +77,7 @@ static unsigned char gmime_datetok_table[256] = { 111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111, }; -/* hrm, is there a library for this shit? */ +/* hrm, is there a library for this stuff? */ static struct { char *name; int offset; @@ -115,8 +117,8 @@ typedef struct _date_token { size_t len; } date_token; -#define date_token_free(tok) g_slice_free (date_token, tok) -#define date_token_new() g_slice_new (date_token) +#define date_token_free(tok) free (tok) +#define date_token_new() malloc (sizeof (date_token)) static date_token * datetok (const char *date) @@ -222,8 +224,9 @@ static int get_wday (const char *in, size_t inlen) { int wday; - - g_return_val_if_fail (in != NULL, -1); + + if (in == NULL) + return -1; if (inlen < 3) return -1; @@ -241,7 +244,8 @@ get_mday (const char *in, size_t inlen) { int mday; - g_return_val_if_fail (in != NULL, -1); + if (in == NULL) + return -1; mday = decode_int (in, inlen); @@ -256,7 +260,8 @@ get_month (const char *in, size_t inlen) { int i; - g_return_val_if_fail (in != NULL, -1); + if (in == NULL) + return -1; if (inlen < 3) return -1; @@ -274,7 +279,8 @@ get_year (const char *in, size_t inlen) { int year; - g_return_val_if_fail (in != NULL, -1); + if (in == NULL) + return -1; if ((year = decode_int (in, inlen)) == -1) return -1; @@ -288,7 +294,7 @@ get_year (const char *in, size_t inlen) return year; } -static gboolean +static int get_time (const char *in, size_t inlen, int *hour, int *min, int *sec) { register const char *inptr; @@ -359,6 +365,8 @@ get_tzone (date_token **token) return -1; } +#define HAVE_TIMEZONE + static time_t mktime_utc (struct tm *tm) { @@ -405,7 +413,8 @@ parse_rfc822_date (date_token *tokens, int *tzone) struct tm tm; time_t t; - g_return_val_if_fail (tokens != NULL, (time_t) 0); + if (tokens == NULL) + return 0; token = tokens; @@ -481,7 +490,7 @@ parse_rfc822_date (date_token *tokens, int *tzone) static time_t parse_broken_date (date_token *tokens, int *tzone) { - gboolean got_wday, got_month, got_tzone; + int got_wday, got_month, got_tzone; int hour, min, sec, offset, n; date_token *token; struct tm tm; @@ -631,30 +640,20 @@ gmime_datetok_table_init (void) } #endif - -/** - * g_mime_utils_header_decode_date: - * @str: input date string - * @tz_offset: timezone offset - * - * Decodes the rfc822 date string and saves the GMT offset into - * @tz_offset if non-NULL. - * - * Returns: the time_t representation of the date string specified by - * @str or (time_t) %0 on error. If @tz_offset is non-NULL, the value - * of the timezone offset will be stored. - **/ time_t -g_mime_utils_header_decode_date (const char *str, int *tz_offset) +notmuch_parse_date (const char *str, int *tz_offset) { date_token *token, *tokens; time_t date; - + + if (str == NULL) + return 0; + if (!(tokens = datetok (str))) { if (tz_offset) *tz_offset = 0; - return (time_t) 0; + return 0; } if (!(date = parse_rfc822_date (tokens, tz_offset)))