summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--cgit.c11
-rw-r--r--cgit.h2
-rw-r--r--cgitrc.5.txt17
-rw-r--r--ui-plain.c12
4 files changed, 41 insertions, 1 deletions
diff --git a/cgit.c b/cgit.c
index 2039ab1..4f414c3 100644
--- a/cgit.c
+++ b/cgit.c
@@ -19,2 +19,10 @@ const char *cgit_version = CGIT_VERSION;
19 19
20void add_mimetype(const char *name, const char *value)
21{
22 struct string_list_item *item;
23
24 item = string_list_insert(xstrdup(name), &ctx.cfg.mimetypes);
25 item->util = xstrdup(value);
26}
27
20void config_cb(const char *name, const char *value) 28void config_cb(const char *name, const char *value)
@@ -103,2 +111,4 @@ void config_cb(const char *name, const char *value)
103 ctx.cfg.local_time = atoi(value); 111 ctx.cfg.local_time = atoi(value);
112 else if (!prefixcmp(name, "mimetype."))
113 add_mimetype(name + 9, value);
104 else if (!strcmp(name, "repo.group")) 114 else if (!strcmp(name, "repo.group"))
@@ -215,2 +225,3 @@ static void prepare_context(struct cgit_context *ctx)
215 ctx->page.etag = NULL; 225 ctx->page.etag = NULL;
226 memset(&ctx->cfg.mimetypes, 0, sizeof(struct string_list));
216} 227}
diff --git a/cgit.h b/cgit.h
index 8c64efe..9259f33 100644
--- a/cgit.h
+++ b/cgit.h
@@ -17,2 +17,3 @@
17#include <archive.h> 17#include <archive.h>
18#include <string-list.h>
18#include <xdiff-interface.h> 19#include <xdiff-interface.h>
@@ -176,2 +177,3 @@ struct cgit_config {
176 int summary_tags; 177 int summary_tags;
178 struct string_list mimetypes;
177}; 179};
diff --git a/cgitrc.5.txt b/cgitrc.5.txt
index a207fe0..7256ec0 100644
--- a/cgitrc.5.txt
+++ b/cgitrc.5.txt
@@ -149,2 +149,6 @@ max-stats::
149 149
150mimetype.<ext>::
151 Set the mimetype for the specified filename extension. This is used
152 by the `plain` command when returning blob content.
153
150module-link:: 154module-link::
@@ -327,2 +331,15 @@ snapshots=tar.gz tar.bz2 zip
327## 331##
332## List of common mimetypes
333##
334
335mimetype.git=image/git
336mimetype.html=text/html
337mimetype.jpg=image/jpeg
338mimetype.jpeg=image/jpeg
339mimetype.pdf=application/pdf
340mimetype.png=image/png
341mimetype.svg=image/svg+xml
342
343
344##
328## List of repositories. 345## List of repositories.
diff --git a/ui-plain.c b/ui-plain.c
index 93a3a05..27c6dae 100644
--- a/ui-plain.c
+++ b/ui-plain.c
@@ -19,4 +19,5 @@ static void print_object(const unsigned char *sha1, const char *path)
19 enum object_type type; 19 enum object_type type;
20 char *buf; 20 char *buf, *ext;
21 unsigned long size; 21 unsigned long size;
22 struct string_list_item *mime;
22 23
@@ -33,2 +34,10 @@ static void print_object(const unsigned char *sha1, const char *path)
33 } 34 }
35 ctx.page.mimetype = NULL;
36 ext = strrchr(path, '.');
37 if (ext && *(++ext)) {
38 mime = string_list_lookup(ext, &ctx.cfg.mimetypes);
39 if (mime)
40 ctx.page.mimetype = (char *)mime->util;
41 }
42 if (!ctx.page.mimetype) {
34 if (buffer_is_binary(buf, size)) 43 if (buffer_is_binary(buf, size))
@@ -37,2 +46,3 @@ static void print_object(const unsigned char *sha1, const char *path)
37 ctx.page.mimetype = "text/plain"; 46 ctx.page.mimetype = "text/plain";
47 }
38 ctx.page.filename = fmt("%s", path); 48 ctx.page.filename = fmt("%s", path);