X-Git-Url: https://gitweb.ps.run/ps-cgit/blobdiff_plain/42effc939090b2fbf1b2b76cd1d9c30fabcd230e..6bf2658f04089179aa373e47bd1d0718e808a59b:/ui-blob.c diff --git a/ui-blob.c b/ui-blob.c index 73a8c1d..89330ce 100644 --- a/ui-blob.c +++ b/ui-blob.c @@ -13,7 +13,8 @@ static char *match_path; static unsigned char *matched_sha1; -static int walk_tree(const unsigned char *sha1, const char *base,int baselen, const char *pathname, unsigned mode, int stage) { +static int walk_tree(const unsigned char *sha1, const char *base,int baselen, + const char *pathname, unsigned mode, int stage, void *cbdata) { if(strncmp(base,match_path,baselen) || strcmp(match_path+baselen,pathname) ) return READ_TREE_RECURSIVE; @@ -26,7 +27,7 @@ void cgit_print_blob(const char *hex, char *path, const char *head) unsigned char sha1[20]; enum object_type type; - unsigned char *buf; + char *buf; unsigned long size; struct commit *commit; const char *paths[] = {path, NULL}; @@ -49,7 +50,7 @@ void cgit_print_blob(const char *hex, char *path, const char *head) commit = lookup_commit_reference(sha1); match_path = path; matched_sha1 = sha1; - read_tree_recursive(commit->tree, NULL, 0, 0, paths, walk_tree); + read_tree_recursive(commit->tree, "", 0, 0, paths, walk_tree, NULL); type = sha1_object_info(sha1,&size); } @@ -66,6 +67,12 @@ void cgit_print_blob(const char *hex, char *path, const char *head) buf[size] = '\0'; ctx.page.mimetype = ctx.qry.mimetype; + if (!ctx.page.mimetype) { + if (buffer_is_binary(buf, size)) + ctx.page.mimetype = "application/octet-stream"; + else + ctx.page.mimetype = "text/plain"; + } ctx.page.filename = path; cgit_print_http_headers(&ctx); write(htmlfd, buf, size);