X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fimport%2Fcurl-util.c;h=313b04b0b82e57369bcbb0576dc8d42bbd0289cf;hb=0193ad26ba121f3df259cc8b3bab54a99b8e5252;hp=eaaebaef42fc98166389f711cbb273d3bd73cb20;hpb=72648326ea6d3e68cdb0b5890df737047d031a41;p=elogind.git diff --git a/src/import/curl-util.c b/src/import/curl-util.c index eaaebaef4..313b04b0b 100644 --- a/src/import/curl-util.c +++ b/src/import/curl-util.c @@ -236,6 +236,7 @@ CurlGlue *curl_glue_unref(CurlGlue *g) { sd_event_source_unref(g->timer); sd_event_unref(g->event); + free(g); return NULL; } @@ -413,3 +414,36 @@ int curl_header_strdup(const void *contents, size_t sz, const char *field, char *value = s; return 1; } + +int curl_parse_http_time(const char *t, usec_t *ret) { + const char *e; + locale_t loc; + struct tm tm; + time_t v; + + assert(t); + assert(ret); + + loc = newlocale(LC_TIME_MASK, "C", (locale_t) 0); + if (loc == (locale_t) 0) + return -errno; + + /* RFC822 */ + e = strptime_l(t, "%a, %d %b %Y %H:%M:%S %Z", &tm, loc); + if (!e || *e != 0) + /* RFC 850 */ + e = strptime_l(t, "%A, %d-%b-%y %H:%M:%S %Z", &tm, loc); + if (!e || *e != 0) + /* ANSI C */ + e = strptime_l(t, "%a %b %d %H:%M:%S %Y", &tm, loc); + freelocale(loc); + if (!e || *e != 0) + return -EINVAL; + + v = timegm(&tm); + if (v == (time_t) -1) + return -EINVAL; + + *ret = (usec_t) v * USEC_PER_SEC; + return 0; +}