From 472b4ddbf151b44f5fc01c4c1752ce5529a0cf85 Mon Sep 17 00:00:00 2001 From: Xavier Del Campo Romero Date: Tue, 3 Oct 2023 00:09:37 +0200 Subject: Implement HEAD support --- page.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'page.c') diff --git a/page.c b/page.c index f3856a9..02049a3 100644 --- a/page.c +++ b/page.c @@ -2199,3 +2199,36 @@ end: return ret; } + +int page_head_resource(struct http_response *const r, const char *const res) +{ + struct stat sb; + + if (stat(res, &sb)) + { + if (errno == ENOENT || errno == ENOTDIR) + return page_not_found(r); + else + { + fprintf(stderr, "%s: stat(2) %s: %s\n", + __func__, res, strerror(errno)); + return -1; + } + } + + const mode_t m = sb.st_mode; + + if (!S_ISDIR(m) && !S_ISREG(m)) + { + fprintf(stderr, "%s: unexpected st_mode %jd\n", __func__, (intmax_t)m); + return -1; + } + + *r = (const struct http_response) + { + .status = HTTP_STATUS_OK, + .n = sb.st_size + }; + + return 0; +} -- cgit v1.2.3