Commit 8e14b47f by Jacques Germishuys

Introduce git__date_rfc2822_fmt. Allows for RFC2822 date headers

parent b3b36a68
...@@ -874,3 +874,31 @@ int git__date_parse(git_time_t *out, const char *date) ...@@ -874,3 +874,31 @@ int git__date_parse(git_time_t *out, const char *date)
*out = approxidate_str(date, time_sec, &error_ret); *out = approxidate_str(date, time_sec, &error_ret);
return error_ret; return error_ret;
} }
int git__date_rfc2822_fmt(char *out, size_t len, const git_time *date)
{
int written;
struct tm gmt;
time_t t;
assert(out && date);
t = (time_t) (date->time + date->offset * 60);
if (p_gmtime_r (&t, &gmt) == NULL)
return -1;
written = p_snprintf(out, len, "%.3s, %u %.3s %.4u %02u:%02u:%02u %+03d%02d",
weekday_names[gmt.tm_wday],
gmt.tm_mday,
month_names[gmt.tm_mon],
gmt.tm_year + 1900,
gmt.tm_hour, gmt.tm_min, gmt.tm_sec,
date->offset / 60, date->offset % 60);
if (written < 0 || (written > (int) len - 1))
return -1;
return 0;
}
...@@ -20,6 +20,8 @@ ...@@ -20,6 +20,8 @@
# define max(a,b) ((a) > (b) ? (a) : (b)) # define max(a,b) ((a) > (b) ? (a) : (b))
#endif #endif
#define GIT_DATE_RFC2822_SZ 32
/* /*
* Custom memory allocation wrappers * Custom memory allocation wrappers
* that set error code and error message * that set error code and error message
...@@ -329,6 +331,16 @@ extern int git__parse_bool(int *out, const char *value); ...@@ -329,6 +331,16 @@ extern int git__parse_bool(int *out, const char *value);
extern int git__date_parse(git_time_t *out, const char *date); extern int git__date_parse(git_time_t *out, const char *date);
/* /*
* Format a git_time as a RFC2822 string
*
* @param out buffer to store formatted date; a '\\0' terminator will automatically be added.
* @param len size of the buffer; should be atleast `GIT_DATE_RFC2822_SZ` in size;
* @param date the date to be formatted
* @return 0 if successful; -1 on error
*/
extern int git__date_rfc2822_fmt(char *out, size_t len, const git_time *date);
/*
* Unescapes a string in-place. * Unescapes a string in-place.
* *
* Edge cases behavior: * Edge cases behavior:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment