summaryrefslogtreecommitdiffstatshomepage
path: root/html.c
Commit message (Expand)AuthorAge
* html: html_ntxt with no ellipsisJeff Smith2017-10-03
* Simplify http_parse_querystring()Lukas Fleischer2016-10-01
* ui-shared: prevent malicious filename from injecting headersJason A. Donenfeld2016-01-14
* html: remove html_status()John Keeping2015-08-14
* Remove redundant includesJohn Keeping2015-08-13
* html: avoid using a plain integer as a NULL pointerJohn Keeping2015-03-09
* html: remove redundant htmlfd variableJohn Keeping2014-01-12
* Update copyright informationLukas Fleischer2014-01-08
* html.c: die when write failsJohn Keeping2013-05-22
* html.c: add various strbuf and varadic helpersJohn Keeping2013-04-08
* html.c: Replace strdup() with xstrdup()Lukas Fleischer2013-04-08
* Always #include corresponding .h in .c filesJohn Keeping2013-04-08
* html: check return value of writeJason A. Donenfeld2013-03-20
* Mark several functions/variables staticLukas Fleischer2013-03-04
* White space around control verbs.Jason A. Donenfeld2013-03-04
* Fix several whitespace errorsLukas Fleischer2013-03-04
* Merge branch 'stable'Lars Hjemli2011-07-21
|\
| * html.c: avoid out-of-bounds access for url_escape_tableEric Wong2011-07-21
* | Merge branch 'stable'Lars Hjemli2011-05-30
|\|
| * Properly escape ampersands inside HTML attributesLukas Fleischer2011-05-30
* | Merge branch 'lh/panel'Lars Hjemli2011-05-23
|\ \ | |/ |/|
| * html.c: add html_intoption()Lars Hjemli2011-03-06
* | Fix memory leak in http_parse_querystring().Lukas Fleischer2011-05-23
* | Fix escaping of paths with spacesJonathon Mah2011-05-23
|/
* Merge branch 'stable'Lars Hjemli2011-03-05
|\
| * do not infloop on a query ending in %XY, for invalid hex X or YJim Meyering2011-03-05
* | html.c: use '+' to escape spaces in urlsLars Hjemli2010-11-10
* | prefer html_raw() to write()Mark Lodato2010-09-04
* | Merge branch 'stable'Lars Hjemli2010-08-29
|\|
| * html: fix strcpy bug in convert_query_hexcharMark Lodato2010-08-29
* | html: properly percent-escape URLsMark Lodato2010-02-09
* | html: make all strings 'const char *'Mark Lodato2010-02-08
|/
* html.c: use correct escaping in html attributesLars Hjemli2009-01-29
* html.c: add html_url_pathLars Hjemli2008-10-05
* html.c: add html_url_argLars Hjemli2008-10-05
* Supply status description to html_status()Lars Hjemli2008-08-06
* Implement plain viewLars Hjemli2008-08-06
* Add support for cloning over httpLars Hjemli2008-08-06
* Print an error if filename is not found in html_include.Harley Laue2008-04-29
* Merge branch 'lh/cleanup'Lars Hjemli2008-04-08
|\
| * Move cgit_parse_query() from parsing.c to html.c as http_parse_querystring()Lars Hjemli2008-04-08
| * Introduce html.hLars Hjemli2008-03-18
* | Merge branch 'stable'Lars Hjemli2008-02-23
|\ \ | |/ |/|
| * Fix segfaultHiroki Hattori2008-02-23
* | Fix html error detected by test-suiteLars Hjemli2007-11-11
|/
* Add html_option() functionLars Hjemli2007-10-28
* Rename dirlink to gitlink.Jeffrey C. Ollie2007-06-04
* Add html_include()Lars Hjemli2007-05-18
* Add submodule links in tree listingLars Hjemli2007-05-11
* Add generic support for search box in page headerLars Hjemli2006-12-28
<table class='blob'>\n"); idx = 0; start = 0; lineno = 0; while(idx < size) { if (buf[idx] == '\n') { buf[idx] = '\0'; htmlf("<tr><td class='no'>%d</td><td class='txt'>", ++lineno); html_txt(buf + start); html("</td></tr>\n"); start = idx + 1; } idx++; } html("</table>\n"); } static int ls_item(const unsigned char *sha1, const char *base, int baselen, const char *pathname, unsigned int mode, int stage) { char *name; char *fullpath; enum object_type type; unsigned long size = 0; name = xstrdup(pathname); fullpath = fmt("%s%s%s", cgit_query_path ? cgit_query_path : "", cgit_query_path ? "/" : "", name); type = sha1_object_info(sha1, &size); if (type == OBJ_BAD && !S_ISDIRLNK(mode)) { htmlf("<tr><td colspan='3'>Bad object: %s %s</td></tr>", name, sha1_to_hex(sha1)); return 0; } html("<tr><td class='ls-mode'>"); html_filemode(mode); html("</td><td>"); if (S_ISDIRLNK(mode)) { htmlf("<a class='ls-mod' href='"); html_attr(fmt(cgit_repo->module_link, name, sha1_to_hex(sha1))); html("'>"); html_txt(name); html("</a>"); } else if (S_ISDIR(mode)) { cgit_tree_link(name, NULL, "ls-dir", cgit_query_head, curr_rev, fullpath); } else { cgit_tree_link(name, NULL, "ls-blob", cgit_query_head, curr_rev, fullpath); } htmlf("</td><td class='ls-size'>%li</td>", size); html("<td>"); cgit_log_link("L", "Log", "button", cgit_query_head, curr_rev, fullpath); html("</td></tr>\n"); free(name); return 0; } static void ls_head() { html("<table class='list'>\n"); html("<tr class='nohover'>"); html("<th class='left'>Mode</th>"); html("<th class='left'>Name</th>"); html("<th class='right'>Size</th>"); html("<th/>"); html("</tr>\n"); header = 1; } static void ls_tail() { if (!header) return; html("</table>\n"); header = 0; } static void ls_tree(const unsigned char *sha1, char *path) { struct tree *tree; tree = parse_tree_indirect(sha1); if (!tree) { cgit_print_error(fmt("Not a tree object: %s", sha1_to_hex(sha1))); return; } ls_head(); read_tree_recursive(tree, "", 0, 1, NULL, ls_item); ls_tail(); } static int walk_tree(const unsigned char *sha1, const char *base, int baselen, const char *pathname, unsigned mode, int stage) { static int state; static char buffer[PATH_MAX]; char *url; if (state == 0) { memcpy(buffer, base, baselen); strcpy(buffer+baselen, pathname); url = cgit_pageurl(cgit_query_repo, "tree", fmt("h=%s&amp;path=%s", curr_rev, buffer)); html("/"); cgit_tree_link(xstrdup(pathname), NULL, NULL, cgit_query_head, curr_rev, buffer); if (strcmp(match_path, buffer)) return READ_TREE_RECURSIVE; if (S_ISDIR(mode)) { state = 1; ls_head(); return READ_TREE_RECURSIVE; } else { print_object(sha1, buffer); return 0; } } ls_item(sha1, base, baselen, pathname, mode, stage); return 0; } /* * Show a tree or a blob * rev: the commit pointing at the root tree object * path: path to tree or blob */ void cgit_print_tree(const char *rev, char *path) { unsigned char sha1[20]; struct commit *commit; const char *paths[] = {path, NULL}; if (!rev) rev = cgit_query_head; curr_rev = xstrdup(rev); if (get_sha1(rev, sha1)) { cgit_print_error(fmt("Invalid revision name: %s", rev)); return; } commit = lookup_commit_reference(sha1); if (!commit || parse_commit(commit)) { cgit_print_error(fmt("Invalid commit reference: %s", rev)); return; } html("path: <a href='"); html_attr(cgit_pageurl(cgit_query_repo, "tree", fmt("h=%s", rev))); html("'>root</a>"); if (path == NULL) { ls_tree(commit->tree->object.sha1, NULL); return; } match_path = path; read_tree_recursive(commit->tree, NULL, 0, 0, paths, walk_tree); ls_tail(); }