summaryrefslogtreecommitdiff
path: root/content
diff options
context:
space:
mode:
Diffstat (limited to 'content')
-rw-r--r--content/fetchers/resource.c29
1 files changed, 19 insertions, 10 deletions
diff --git a/content/fetchers/resource.c b/content/fetchers/resource.c
index 78757733e..94a51405d 100644
--- a/content/fetchers/resource.c
+++ b/content/fetchers/resource.c
@@ -33,6 +33,7 @@
#include "utils/nsurl.h"
#include "utils/corestrings.h"
#include "utils/log.h"
+#include "utils/time.h"
#include "utils/messages.h"
#include "utils/utils.h"
#include "utils/ring.h"
@@ -97,7 +98,7 @@ struct fetch_resource_context {
fetch_resource_handler handler;
- int etag;
+ time_t etag;
};
static struct fetch_resource_context *ring = NULL;
@@ -328,6 +329,7 @@ fetch_resource_setup(struct fetch *fetchh,
{
struct fetch_resource_context *ctx;
lwc_string *path;
+ nserror ret;
uint32_t i;
ctx = calloc(1, sizeof(*ctx));
@@ -364,17 +366,24 @@ fetch_resource_setup(struct fetch *fetchh,
/* Scan request headers looking for If-None-Match */
for (i = 0; headers[i] != NULL; i++) {
if (strncasecmp(headers[i], "If-None-Match:",
- SLEN("If-None-Match:")) == 0) {
- /* If-None-Match: "12345678" */
- const char *d = headers[i] + SLEN("If-None-Match:");
+ SLEN("If-None-Match:")) != 0) {
+ continue;
+ }
- /* Scan to first digit, if any */
- while (*d != '\0' && (*d < '0' || '9' < *d))
- d++;
+ /* If-None-Match: "12345678" */
+ const char *d = headers[i] + SLEN("If-None-Match:");
- /* Convert to time_t */
- if (*d != '\0')
- ctx->etag = atoi(d);
+ /* Scan to first digit, if any */
+ while (*d != '\0' && (*d < '0' || '9' < *d))
+ d++;
+
+ /* Convert to time_t */
+ if (*d != '\0') {
+ ret = nsc_snptimet(d, strlen(d), &ctx->etag);
+ if (ret != NSERROR_OK) {
+ NSLOG(fetch, WARNING,
+ "Bad If-None-Match value");
+ }
}
}