From c4d46c7035d07070ac1ebf0c0b44df927358687f Mon Sep 17 00:00:00 2001 From: Lars Hjemli Date: Fri, 13 Feb 2009 20:43:30 +0100 Subject: Add support for mime type registration and lookup This patch makes it possible to register mappings from filename extension to mime type in cgitrc and use this mapping when returning blob content in `plain` view. The reason for adding this mapping to cgitrc (as opposed to parsing something like /etc/mime.types) is to allow quick lookup of a limited number of filename extensions (/etc/mime-types on my machine currently contains over 700 entries). NB: A nice addition to this patch would be to parse /etc/mime.types when `plain` view is requested for a file with an extension for which there is no mapping registered in cgitrc. Signed-off-by: Lars Hjemli --- cgit.c | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'cgit.c') diff --git a/cgit.c b/cgit.c index 2039ab1..4f414c3 100644 --- a/cgit.c +++ b/cgit.c @@ -17,6 +17,14 @@ const char *cgit_version = CGIT_VERSION; +void add_mimetype(const char *name, const char *value) +{ + struct string_list_item *item; + + item = string_list_insert(xstrdup(name), &ctx.cfg.mimetypes); + item->util = xstrdup(value); +} + void config_cb(const char *name, const char *value) { if (!strcmp(name, "root-title")) @@ -101,6 +109,8 @@ void config_cb(const char *name, const char *value) ctx.cfg.clone_prefix = xstrdup(value); else if (!strcmp(name, "local-time")) ctx.cfg.local_time = atoi(value); + else if (!prefixcmp(name, "mimetype.")) + add_mimetype(name + 9, value); else if (!strcmp(name, "repo.group")) ctx.cfg.repo_group = xstrdup(value); else if (!strcmp(name, "repo.url")) @@ -213,6 +223,7 @@ static void prepare_context(struct cgit_context *ctx) ctx->page.modified = time(NULL); ctx->page.expires = ctx->page.modified; ctx->page.etag = NULL; + memset(&ctx->cfg.mimetypes, 0, sizeof(struct string_list)); } struct refmatch { -- cgit v1.2.3-54-g00ecf