cgit

commit 0255821e22678d4c58c809efe17bf2798835d5b9

Author: Jason A. Donenfeld <Jason@zx2c4.com>

Merge branch 'wip'

 cache.c | 2 
 cgit.c | 34 +++++++++++++++++----------
 cgit.h | 1 
 configfile.c | 6 ++--
 html.c | 6 ++--
 parsing.c | 6 ++--
 shared.c | 48 ++++++++++++++++++++++++++++++++++----
 ui-atom.c | 2 
 ui-commit.c | 1 
 ui-diff.c | 5 ++-
 ui-log.c | 6 ++--
 ui-refs.c | 12 +++++++++
 ui-repolist.c | 14 +++++-----
 ui-shared.c | 64 +++++-----------------------------------------------
 ui-snapshot.c | 2 
 ui-stats.c | 17 ++++++++-----
 ui-tag.c | 2 
 ui-tree.c | 8 ++++-


diff --git a/cache.c b/cache.c
index 47cdcb44d5ccdfe9bf95c4a8b7af94ded87bfcf4..3127fc26366ba35363f81abc35cf579f07e7d612 100644
--- a/cache.c
+++ b/cache.c
@@ -363,7 +363,7 @@
 /* Return a strftime formatted date/time
  * NB: the result from this function is to shared memory
  */
-char *sprintftime(const char *format, time_t time)
+static char *sprintftime(const char *format, time_t time)
 {
 	static char buf[64];
 	struct tm *tm;




diff --git a/cgit.c b/cgit.c
index 2ccf8646a5e5867632b5dcf6b2e15cbacd16f9f1..afafccee82f49639e191fd4c0c1a3d9b2aa027ee 100644
--- a/cgit.c
+++ b/cgit.c
@@ -18,7 +18,7 @@ #include "scan-tree.h"
 
 const char *cgit_version = CGIT_VERSION;
 
-void add_mimetype(const char *name, const char *value)
+static void add_mimetype(const char *name, const char *value)
 {
 	struct string_list_item *item;
 
@@ -26,7 +26,7 @@ 	item = string_list_insert(&ctx.cfg.mimetypes, xstrdup(name));
 	item->util = xstrdup(value);
 }
 
-struct cgit_filter *new_filter(const char *cmd, filter_type filtertype)
+static struct cgit_filter *new_filter(const char *cmd, filter_type filtertype)
 {
 	struct cgit_filter *f;
 	int args_size = 0;
@@ -58,7 +58,7 @@ }
 
 static void process_cached_repolist(const char *path);
 
-void repo_config(struct cgit_repo *repo, const char *name, const char *value)
+static void repo_config(struct cgit_repo *repo, const char *name, const char *value)
 {
 	struct string_list_item *item;
 
@@ -114,7 +114,7 @@ 			repo->source_filter = new_filter(value, SOURCE);
 	}
 }
 
-void config_cb(const char *name, const char *value)
+static void config_cb(const char *name, const char *value)
 {
 	if (!strcmp(name, "section") || !strcmp(name, "repo.group"))
 		ctx.cfg.section = xstrdup(value);
@@ -333,7 +333,7 @@ 		ctx.qry.ignorews = atoi(value);
 	}
 }
 
-char *xstrdupn(const char *str)
+static char *xstrdupn(const char *str)
 {
 	return (str ? xstrdup(str) : NULL);
 }
@@ -414,8 +414,8 @@ 	char *first_ref;
 	int match;
 };
 
-int find_current_ref(const char *refname, const unsigned char *sha1,
-		     int flags, void *cb_data)
+static int find_current_ref(const char *refname, const unsigned char *sha1,
+			    int flags, void *cb_data)
 {
 	struct refmatch *info;
 
@@ -427,7 +427,13 @@ 		info->first_ref = xstrdup(refname);
 	return info->match;
 }
 
-char *find_default_branch(struct cgit_repo *repo)
+static void free_refmatch_inner(struct refmatch *info)
+{
+	if (info->first_ref)
+		free(info->first_ref);
+}
+
+static char *find_default_branch(struct cgit_repo *repo)
 {
 	struct refmatch info;
 	char *ref;
@@ -442,6 +448,8 @@ 	else
 		ref = info.first_ref;
 	if (ref)
 		ref = xstrdup(ref);
+	free_refmatch_inner(&info);
+
 	return ref;
 }
 
@@ -569,13 +577,13 @@ 	if (cmd->want_layout)
 		cgit_print_docend();
 }
 
-int cmp_repos(const void *a, const void *b)
+static int cmp_repos(const void *a, const void *b)
 {
 	const struct cgit_repo *ra = a, *rb = b;
 	return strcmp(ra->url, rb->url);
 }
 
-char *build_snapshot_setting(int bitmap)
+static char *build_snapshot_setting(int bitmap)
 {
 	const struct cgit_snapshot_format *f;
 	char *result = xstrdup("");
@@ -595,7 +603,7 @@ 		result[len - 1] = '\0';
 	return result;
 }
 
-char *get_first_line(char *txt)
+static char *get_first_line(char *txt)
 {
 	char *t = xstrdup(txt);
 	char *p = strchr(t, '\n');
@@ -604,7 +612,7 @@ 		*p = '\0';
 	return t;
 }
 
-void print_repo(FILE *f, struct cgit_repo *repo)
+static void print_repo(FILE *f, struct cgit_repo *repo)
 {
 	fprintf(f, "repo.url=%s\n", repo->url);
 	fprintf(f, "repo.name=%s\n", repo->name);
@@ -649,7 +657,7 @@ 		        cgit_find_stats_periodname(repo->max_stats));
 	fprintf(f, "\n");
 }
 
-void print_repolist(FILE *f, struct cgit_repolist *list, int start)
+static void print_repolist(FILE *f, struct cgit_repolist *list, int start)
 {
 	int i;
 




diff --git a/cgit.h b/cgit.h
index c655bd8eb54266150a0f80bd35e11ec2ed184e38..ed5cf1487c7f728b0150510d79c30636790ea81a 100644
--- a/cgit.h
+++ b/cgit.h
@@ -304,6 +304,7 @@ extern char *strlpart(char *txt, int maxlen);
 extern char *strrpart(char *txt, int maxlen);
 
 extern void cgit_add_ref(struct reflist *list, struct refinfo *ref);
+extern void cgit_free_reflist_inner(struct reflist *list);
 extern int cgit_refs_cb(const char *refname, const unsigned char *sha1,
 			int flags, void *cb_data);
 




diff --git a/configfile.c b/configfile.c
index 3fa217f921b56a670a7ddd4049cdb6180f68a1c7..d98989c4312aed59e9a6a45aee3b603c8ac1c48f 100644
--- a/configfile.c
+++ b/configfile.c
@@ -10,7 +10,7 @@ #include 
 #include <stdio.h>
 #include "configfile.h"
 
-int next_char(FILE *f)
+static int next_char(FILE *f)
 {
 	int c = fgetc(f);
 	if (c == '\r') {
@@ -23,7 +23,7 @@ 	}
 	return c;
 }
 
-void skip_line(FILE *f)
+static void skip_line(FILE *f)
 {
 	int c;
 
@@ -31,7 +31,7 @@ 	while ((c = next_char(f)) && c != '\n' && c != EOF)
 		;
 }
 
-int read_config_line(FILE *f, char *line, const char **value, int bufsize)
+static int read_config_line(FILE *f, char *line, const char **value, int bufsize)
 {
 	int i = 0, isname = 0;
 




diff --git a/html.c b/html.c
index 90cc1c0099198da575119e0b0f38fa3db478f785..b5c69034f5dfa8a07d9ccbf8a9c61194e9bd07d6 100644
--- a/html.c
+++ b/html.c
@@ -39,7 +39,7 @@ 	"%f4", "%f5", "%f6", "%f7", "%f8", "%f9", "%fa", "%fb", "%fc", "%fd",
 	"%fe", "%ff"
 };
 
-int htmlfd = STDOUT_FILENO;
+static int htmlfd = STDOUT_FILENO;
 
 char *fmt(const char *format, ...)
 {
@@ -266,7 +266,7 @@ 	fclose(f);
 	return 0;
 }
 
-int hextoint(char c)
+static int hextoint(char c)
 {
 	if (c >= 'a' && c <= 'f')
 		return 10 + c - 'a';
@@ -278,7 +278,7 @@ 	else
 		return -1;
 }
 
-char *convert_query_hexchar(char *txt)
+static char *convert_query_hexchar(char *txt)
 {
 	int d1, d2, n;
 	n = strlen(txt);




diff --git a/parsing.c b/parsing.c
index 9b7efb31260658948bfae8374488bd673c815e16..658621d8e76b74336eb8827b3354d59ec9d35320 100644
--- a/parsing.c
+++ b/parsing.c
@@ -52,7 +52,7 @@ 		return;
 	}
 }
 
-char *substr(const char *head, const char *tail)
+static char *substr(const char *head, const char *tail)
 {
 	char *buf;
 
@@ -64,7 +64,7 @@ 	buf[tail - head] = '\0';
 	return buf;
 }
 
-char *parse_user(char *t, char **name, char **email, unsigned long *date)
+static char *parse_user(char *t, char **name, char **email, unsigned long *date)
 {
 	char *p = t;
 	int mode = 1;
@@ -101,7 +101,7 @@
 #ifdef NO_ICONV
 #define reencode(a, b, c)
 #else
-const char *reencode(char **txt, const char *src_enc, const char *dst_enc)
+static const char *reencode(char **txt, const char *src_enc, const char *dst_enc)
 {
 	char *tmp;
 




diff --git a/shared.c b/shared.c
index e732064afdb40b223dc21e73f25fe84a45a76127..cc06930f68acad64c430ae1fea7c8bdd9c13ae60 100644
--- a/shared.c
+++ b/shared.c
@@ -158,7 +158,7 @@ 	}
 	list->refs[list->count++] = ref;
 }
 
-struct refinfo *cgit_mk_refinfo(const char *refname, const unsigned char *sha1)
+static struct refinfo *cgit_mk_refinfo(const char *refname, const unsigned char *sha1)
 {
 	struct refinfo *ref;
 
@@ -176,6 +176,42 @@ 	}
 	return ref;
 }
 
+static void cgit_free_taginfo(struct taginfo *tag)
+{
+	if (tag->tagger)
+		free(tag->tagger);
+	if (tag->tagger_email)
+		free(tag->tagger_email);
+	if (tag->msg)
+		free(tag->msg);
+	free(tag);
+}
+
+static void cgit_free_refinfo(struct refinfo *ref)
+{
+	if (ref->refname)
+		free((char *)ref->refname);
+	switch (ref->object->type) {
+	case OBJ_TAG:
+		cgit_free_taginfo(ref->tag);
+		break;
+	case OBJ_COMMIT:
+		cgit_free_commitinfo(ref->commit);
+		break;
+	}
+	free(ref);
+}
+
+void cgit_free_reflist_inner(struct reflist *list)
+{
+	int i;
+
+	for (i = 0; i < list->count; i++) {
+		cgit_free_refinfo(list->refs[i]);
+	}
+	free(list->refs);
+}
+
 int cgit_refs_cb(const char *refname, const unsigned char *sha1, int flags,
 		  void *cb_data)
 {
@@ -187,8 +223,8 @@ 		cgit_add_ref(list, info);
 	return 0;
 }
 
-void cgit_diff_tree_cb(struct diff_queue_struct *q,
-		       struct diff_options *options, void *data)
+static void cgit_diff_tree_cb(struct diff_queue_struct *q,
+			      struct diff_options *options, void *data)
 {
 	int i;
 
@@ -224,7 +260,7 @@  */
 char *diffbuf = NULL;
 int buflen = 0;
 
-int filediff_cb(void *priv, mmbuffer_t *mb, int nbuf)
+static int filediff_cb(void *priv, mmbuffer_t *mb, int nbuf)
 {
 	int i;
 
@@ -461,14 +497,14 @@ 	close(fd);
 	return (*size == st.st_size ? 0 : e);
 }
 
-int is_token_char(char c)
+static int is_token_char(char c)
 {
 	return isalnum(c) || c == '_';
 }
 
 /* Replace name with getenv(name), return pointer to zero-terminating char
  */
-char *expand_macro(char *name, int maxlength)
+static char *expand_macro(char *name, int maxlength)
 {
 	char *value;
 	int len;




diff --git a/ui-atom.c b/ui-atom.c
index b218456b6e0f4ddc3b57a42f6e542bec31b4be2b..5b5525d2976701f9a27343a244dcb6c3a1b07fa0 100644
--- a/ui-atom.c
+++ b/ui-atom.c
@@ -10,7 +10,7 @@ #include "cgit.h"
 #include "html.h"
 #include "ui-shared.h"
 
-void add_entry(struct commit *commit, char *host)
+static void add_entry(struct commit *commit, char *host)
 {
 	char delim = '&';
 	char *hex;




diff --git a/ui-commit.c b/ui-commit.c
index 74f37c8a0ff4222c13e410635fc0fac3d0ba9049..078328529b54fd15f7e1f6eacc013c9a97cfcb53 100644
--- a/ui-commit.c
+++ b/ui-commit.c
@@ -74,6 +74,7 @@ 	if (prefix) {
 		html(" /");
 		cgit_tree_link(prefix, NULL, NULL, ctx.qry.head, tmp, prefix);
 	}
+	free(tmp);
 	html("</td></tr>\n");
 	for (p = commit->parents; p; p = p->next) {
 		parent = lookup_commit_reference(p->item->object.sha1);




diff --git a/ui-diff.c b/ui-diff.c
index 49e5b468f4385605efed4cec567e3e016f501379..7de7802bad6e87f0553d2b4d81dd264d5a3ca8f9 100644
--- a/ui-diff.c
+++ b/ui-diff.c
@@ -166,8 +166,9 @@ 	total_adds += lines_added;
 	total_rems += lines_removed;
 }
 
-void cgit_print_diffstat(const unsigned char *old_sha1,
-			 const unsigned char *new_sha1, const char *prefix)
+static void cgit_print_diffstat(const unsigned char *old_sha1,
+				const unsigned char *new_sha1,
+				const char *prefix)
 {
 	int i;
 




diff --git a/ui-log.c b/ui-log.c
index 2f41602a917de13ac9f9daa6cdd50ff15afa3c27..857c05c01f7a7ac26dd79078f9710ef7019ace7f 100644
--- a/ui-log.c
+++ b/ui-log.c
@@ -28,7 +28,7 @@ };
 
 #define COLUMN_COLORS_HTML_MAX (ARRAY_SIZE(column_colors_html) - 1)
 
-void count_lines(char *line, int size)
+static void count_lines(char *line, int size)
 {
 	if (size <= 0)
 		return;
@@ -40,7 +40,7 @@ 	else if (line[0] == '-')
 		rem_lines++;
 }
 
-void inspect_files(struct diff_filepair *pair)
+static void inspect_files(struct diff_filepair *pair)
 {
 	unsigned long old_size = 0;
 	unsigned long new_size = 0;
@@ -95,7 +95,7 @@ 		deco = deco->next;
 	}
 }
 
-void print_commit(struct commit *commit, struct rev_info *revs)
+static void print_commit(struct commit *commit, struct rev_info *revs)
 {
 	struct commitinfo *info;
 	int cols = revs->graph ? 3 : 2;




diff --git a/ui-refs.c b/ui-refs.c
index ce06b089808b524f30ff4027f32be0182fc215c5..e89f8368dcb1f4f667eb797e48f317e1d11376d4 100644
--- a/ui-refs.c
+++ b/ui-refs.c
@@ -103,6 +103,7 @@ {
 	const struct cgit_snapshot_format* f;
     	char *filename;
 	const char *basename;
+	int free_ref = 0;
 
 	if (!ref || strlen(ref) < 2)
 		return;
@@ -111,8 +112,10 @@ 	basename = cgit_repobasename(repo->url);
 	if (prefixcmp(ref, basename) != 0) {
 		if ((ref[0] == 'v' || ref[0] == 'V') && isdigit(ref[1]))
 			ref++;
-		if (isdigit(ref[0]))
+		if (isdigit(ref[0])) {
 			ref = xstrdup(fmt("%s-%s", basename, ref));
+			free_ref = 1;
+		}
 	}
 
 	for (f = cgit_snapshot_formats; f->suffix; f++) {
@@ -122,6 +125,9 @@ 		filename = fmt("%s%s", ref, f->suffix);
 		cgit_snapshot_link(filename, NULL, NULL, NULL, NULL, filename);
 		html("&nbsp;&nbsp;");
 	}
+
+	if (free_ref)
+		free((char *)ref);
 }
 static int print_tag(struct refinfo *ref)
 {
@@ -205,6 +211,8 @@ 		print_branch(list.refs[i]);
 
 	if (maxcount < list.count)
 		print_refs_link("heads");
+
+	cgit_free_reflist_inner(&list);
 }
 
 void cgit_print_tags(int maxcount)
@@ -229,6 +237,8 @@ 		print_tag(list.refs[i]);
 
 	if (maxcount < list.count)
 		print_refs_link("tags");
+
+	cgit_free_reflist_inner(&list);
 }
 
 void cgit_print_refs()




diff --git a/ui-repolist.c b/ui-repolist.c
index 1ae22aaa7e192e9b595118117f19c5f75f3e2219..66c88c4b639b68b95001d57cec234e83a41d0af0 100644
--- a/ui-repolist.c
+++ b/ui-repolist.c
@@ -12,7 +12,7 @@ #include "html.h"
 #include "ui-shared.h"
 #include <strings.h>
 
-time_t read_agefile(char *path)
+static time_t read_agefile(char *path)
 {
 	time_t result;
 	size_t size;
@@ -76,7 +76,7 @@ 	if (get_repo_modtime(repo, &t))
 		cgit_print_age(t, -1, NULL);
 }
 
-int is_match(struct cgit_repo *repo)
+static int is_match(struct cgit_repo *repo)
 {
 	if (!ctx.qry.search)
 		return 1;
@@ -91,7 +91,7 @@ 		return 1;
 	return 0;
 }
 
-int is_in_url(struct cgit_repo *repo)
+static int is_in_url(struct cgit_repo *repo)
 {
 	if (!ctx.qry.url)
 		return 1;
@@ -100,7 +100,7 @@ 		return 1;
 	return 0;
 }
 
-void print_sort_header(const char *title, const char *sort)
+static void print_sort_header(const char *title, const char *sort)
 {
 	htmlf("<th class='left'><a href='%s?s=%s", cgit_rooturl(), sort);
 	if (ctx.qry.search) {
@@ -110,7 +110,7 @@ 	}
 	htmlf("'>%s</a></th>", title);
 }
 
-void print_header()
+static void print_header()
 {
 	html("<tr class='nohover'>");
 	print_sort_header("Name", "name");
@@ -124,7 +124,7 @@ 	html("\n");
 }
 
 
-void print_pager(int items, int pagelen, char *search, char *sort)
+static void print_pager(int items, int pagelen, char *search, char *sort)
 {
 	int i, ofs;
 	char *class = NULL;
@@ -223,7 +223,7 @@ 	{"idle", sort_idle},
 	{NULL, NULL}
 };
 
-int sort_repolist(char *field)
+static int sort_repolist(char *field)
 {
 	struct sortcolumn *column;
 




diff --git a/ui-shared.c b/ui-shared.c
index 80f4aee1e9aa213b2323855f8cb77a35598015c3..968933fe5e7dc1f7e2673aefe88df80fded519e6 100644
--- a/ui-shared.c
+++ b/ui-shared.c
@@ -121,18 +121,6 @@ 		return ++rv;
 	return rvbuf;
 }
 
-char *cgit_currurl()
-{
-	if (!ctx.cfg.virtual_root)
-		return ctx.cfg.script_name;
-	else if (ctx.qry.page)
-		return fmt("%s/%s/%s/", ctx.cfg.virtual_root, ctx.qry.repo, ctx.qry.page);
-	else if (ctx.qry.repo)
-		return fmt("%s/%s/", ctx.cfg.virtual_root, ctx.qry.repo);
-	else
-		return fmt("%s/", ctx.cfg.virtual_root);
-}
-
 static void site_url(const char *page, const char *search, const char *sort, int ofs)
 {
 	char *delim = "?";
@@ -433,8 +421,8 @@ {
 	reporevlink("stats", name, title, class, head, NULL, path);
 }
 
-void cgit_self_link(char *name, const char *title, const char *class,
-		    struct cgit_context *ctx)
+static void cgit_self_link(char *name, const char *title, const char *class,
+			   struct cgit_context *ctx)
 {
 	if (!strcmp(ctx->qry.page, "repolist"))
 		cgit_index_link(name, title, class, ctx->qry.search, ctx->qry.sort,
@@ -513,8 +501,8 @@ 	name = fmt("%s %s...", typename(obj->type), shortrev);
 	reporevlink(page, name, NULL, NULL, ctx.qry.head, fullrev, NULL);
 }
 
-struct string_list_item *lookup_path(struct string_list *list,
-				     const char *path)
+static struct string_list_item *lookup_path(struct string_list *list,
+					    const char *path)
 {
 	struct string_list_item *item;
 
@@ -717,53 +705,14 @@ 	html("
\n"); html("</body>\n</html>\n"); } -int print_branch_option(const char *refname, const unsigned char *sha1, - int flags, void *cb_data) +static int print_branch_option(const char *refname, const unsigned char *sha1, + int flags, void *cb_data) { char *name = (char *)refname; html_option(name, name, ctx.qry.head); return 0; } -int print_archive_ref(const char *refname, const unsigned char *sha1, - int flags, void *cb_data) -{ - struct tag *tag; - struct taginfo *info; - struct object *obj; - char buf[256], *url; - unsigned char fileid[20]; - int *header = (int *)cb_data; - - if (prefixcmp(refname, "refs/archives")) - return 0; - strncpy(buf, refname + 14, sizeof(buf)); - obj = parse_object(sha1); - if (!obj) - return 1; - if (obj->type == OBJ_TAG) { - tag = lookup_tag(sha1); - if (!tag || parse_tag(tag) || !(info = cgit_parse_tag(tag))) - return 0; - hashcpy(fileid, tag->tagged->sha1); - } else if (obj->type != OBJ_BLOB) { - return 0; - } else { - hashcpy(fileid, sha1); - } - if (!*header) { - html("<h1>download</h1>\n"); - *header = 1; - } - url = cgit_pageurl(ctx.qry.repo, "blob", - fmt("id=%s&amp;path=%s", sha1_to_hex(fileid), - buf)); - html_link_open(url, NULL, "menu"); - html_txt(strlpart(buf, 20)); - html_link_close(); - return 0; -} - void cgit_add_hidden_formfields(int incl_head, int incl_search, const char *page) { @@ -983,4 +932,5 @@ filename = fmt("%s%s", prefix, f->suffix); cgit_snapshot_link(filename, NULL, NULL, NULL, NULL, filename); html("<br/>"); } + free(prefix); } diff --git a/ui-snapshot.c b/ui-snapshot.c index 54e659c859200ff8d3d70374a11a293859e81745..e199a92d644d7084a0ca9564e0fc3afa124fc4ab 100644 --- a/ui-snapshot.c +++ b/ui-snapshot.c @@ -153,7 +153,7 @@ return NULL; } -void show_error(char *msg) +static void show_error(char *msg) { ctx.page.mimetype = "text/html"; cgit_print_http_headers(&ctx); diff --git a/ui-stats.c b/ui-stats.c index 9cf1dbdc89fbd40286404289018571c319d7cd0e..480c8eec33734d71787b17aa30b019e553a79e6d 100644 --- a/ui-stats.c +++ b/ui-stats.c @@ -211,8 +211,8 @@ /* Walk the commit DAG and collect number of commits per author per * timeperiod into a nested string_list collection. */ -struct string_list collect_stats(struct cgit_context *ctx, - struct cgit_period *period) +static struct string_list collect_stats(struct cgit_context *ctx, + struct cgit_period *period) { struct string_list authors; struct rev_info rev; @@ -253,9 +253,12 @@ } return authors; } -void print_combined_authorrow(struct string_list *authors, int from, int to, - const char *name, const char *leftclass, const char *centerclass, - const char *rightclass, struct cgit_period *period) +static void print_combined_authorrow(struct string_list *authors, int from, + int to, const char *name, + const char *leftclass, + const char *centerclass, + const char *rightclass, + struct cgit_period *period) { struct string_list_item *author; struct authorstat *authorstat; @@ -293,8 +296,8 @@ } htmlf("<td class='%s'>%ld</td></tr>", rightclass, total); } -void print_authors(struct string_list *authors, int top, - struct cgit_period *period) +static void print_authors(struct string_list *authors, int top, + struct cgit_period *period) { struct string_list_item *author; struct authorstat *authorstat; diff --git a/ui-tag.c b/ui-tag.c index cab96b1b988b19498f7dbb21e84d3f6d416ec7a7..4d340d4bfca6c832637ec91fa320b865da063e60 100644 --- a/ui-tag.c +++ b/ui-tag.c @@ -30,7 +30,7 @@ html("
"); } } -void print_download_links(char *revname) +static void print_download_links(char *revname) { html("<tr><th>download</th><td class='sha1'>"); cgit_print_snapshot_links(ctx.qry.repo, ctx.qry.head, diff --git a/ui-tree.c b/ui-tree.c index 561f9e7c7a0a80a6a222e0aa12fe2e6aed59ad3e..b692b563a850421dd30fc24dc6174f0ed81d3363 100644 --- a/ui-tree.c +++ b/ui-tree.c @@ -271,7 +271,6 @@ if (!rev) rev = ctx.qry.head; - walk_tree_ctx.curr_rev = xstrdup(rev); if (get_sha1(rev, sha1)) { cgit_print_error(fmt("Invalid revision name: %s", rev)); return; @@ -282,12 +281,17 @@ cgit_print_error(fmt("Invalid commit reference: %s", rev)); return; } + walk_tree_ctx.curr_rev = xstrdup(rev); + if (path == NULL) { ls_tree(commit->tree->object.sha1, NULL, &walk_tree_ctx); - return; + goto cleanup; } read_tree_recursive(commit->tree, "", 0, 0, &paths, walk_tree, &walk_tree_ctx); if (walk_tree_ctx.state == 1) ls_tail(); + +cleanup: + free(walk_tree_ctx.curr_rev); }