mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-28 10:15:21 +00:00
Introduce git__date_rfc2822_fmt. Allows for RFC2822 date headers
This commit is contained in:
parent
b3b36a68d1
commit
8e14b47fd7
28
src/date.c
28
src/date.c
@ -874,3 +874,31 @@ int git__date_parse(git_time_t *out, const char *date)
|
||||
*out = approxidate_str(date, time_sec, &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;
|
||||
}
|
||||
|
||||
|
12
src/util.h
12
src/util.h
@ -20,6 +20,8 @@
|
||||
# define max(a,b) ((a) > (b) ? (a) : (b))
|
||||
#endif
|
||||
|
||||
#define GIT_DATE_RFC2822_SZ 32
|
||||
|
||||
/*
|
||||
* Custom memory allocation wrappers
|
||||
* that set error code and error message
|
||||
@ -328,6 +330,16 @@ extern int git__parse_bool(int *out, const char *value);
|
||||
*/
|
||||
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.
|
||||
*
|
||||
|
Loading…
Reference in New Issue
Block a user