*/
#include "cgit.h"
-#include <stdio.h>
struct cgit_repolist cgit_repolist;
struct cgit_context ctx;
return 0;
}
-static void cgit_diff_tree_cb(struct diff_queue_struct *q,
- struct diff_options *options, void *data)
+void cgit_diff_tree_cb(struct diff_queue_struct *q,
+ struct diff_options *options, void *data)
{
int i;
}
return result;
}
+
+char *get_mimetype_for_filename(const char *filename)
+{
+ char *ext, *mimetype, *token, line[1024];
+ FILE *file;
+ struct string_list_item *mime;
+
+ if (!filename)
+ return NULL;
+
+ ext = strrchr(filename, '.');
+ if (!ext)
+ return NULL;
+ ++ext;
+ if (!ext[0])
+ return NULL;
+ mime = string_list_lookup(&ctx.cfg.mimetypes, ext);
+ if (mime)
+ return xstrdup(mime->util);
+
+ if (!ctx.cfg.mimetype_file)
+ return NULL;
+ file = fopen(ctx.cfg.mimetype_file, "r");
+ if (!file)
+ return NULL;
+ while (fgets(line, sizeof(line), file)) {
+ if (!line[0] || line[0] == '#')
+ continue;
+ mimetype = strtok(line, " \t\r\n");
+ while ((token = strtok(NULL, " \t\r\n"))) {
+ if (!strcasecmp(ext, token)) {
+ fclose(file);
+ return xstrdup(mimetype);
+ }
+ }
+ }
+ fclose(file);
+ return NULL;
+}