diff options
| author | Jason A. Donenfeld <Jason@zx2c4.com> | 2013-03-20 20:21:25 +0100 | 
|---|---|---|
| committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2013-03-20 20:21:25 +0100 | 
| commit | 0255821e22678d4c58c809efe17bf2798835d5b9 (patch) | |
| tree | d4679ff23796406648cf83ff0b98940ba844c5e1 | |
| parent | 6d8a789d61f3a682bc040f1f7f44050b1f723546 (diff) | |
| parent | 59fe348deaa270434f05afc56ca8d13618af9ca9 (diff) | |
Merge branch 'wip'
| -rw-r--r-- | cache.c | 2 | ||||
| -rw-r--r-- | cgit.c | 34 | ||||
| -rw-r--r-- | cgit.h | 1 | ||||
| -rw-r--r-- | configfile.c | 6 | ||||
| -rw-r--r-- | html.c | 6 | ||||
| -rw-r--r-- | parsing.c | 6 | ||||
| -rw-r--r-- | shared.c | 48 | ||||
| -rw-r--r-- | ui-atom.c | 2 | ||||
| -rw-r--r-- | ui-commit.c | 1 | ||||
| -rw-r--r-- | ui-diff.c | 5 | ||||
| -rw-r--r-- | ui-log.c | 6 | ||||
| -rw-r--r-- | ui-refs.c | 12 | ||||
| -rw-r--r-- | ui-repolist.c | 14 | ||||
| -rw-r--r-- | ui-shared.c | 64 | ||||
| -rw-r--r-- | ui-snapshot.c | 2 | ||||
| -rw-r--r-- | ui-stats.c | 17 | ||||
| -rw-r--r-- | ui-tag.c | 2 | ||||
| -rw-r--r-- | ui-tree.c | 8 | 
18 files changed, 125 insertions, 111 deletions
| @@ -363,7 +363,7 @@ int cache_process(int size, const char *path, const char *key, int ttl,  /* 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; @@ -18,7 +18,7 @@  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 @@ void add_mimetype(const char *name, const char *value)  	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 @@ struct cgit_filter *new_filter(const char *cmd, filter_type filtertype)  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 @@ void repo_config(struct cgit_repo *repo, const char *name, const char *value)  	}  } -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 @@ static void querystring_cb(const char *name, const char *value)  	}  } -char *xstrdupn(const char *str) +static char *xstrdupn(const char *str)  {  	return (str ? xstrdup(str) : NULL);  } @@ -414,8 +414,8 @@ struct refmatch {  	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 @@ int find_current_ref(const char *refname, const unsigned char *sha1,  	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 @@ char *find_default_branch(struct cgit_repo *repo)  		ref = info.first_ref;  	if (ref)  		ref = xstrdup(ref); +	free_refmatch_inner(&info); +  	return ref;  } @@ -569,13 +577,13 @@ static void process_request(void *cbdata)  		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 @@ char *build_snapshot_setting(int bitmap)  	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 @@ char *get_first_line(char *txt)  	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 @@ void print_repo(FILE *f, struct cgit_repo *repo)  	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; @@ -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 3fa217f..d98989c 100644 --- a/configfile.c +++ b/configfile.c @@ -10,7 +10,7 @@  #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 @@ int next_char(FILE *f)  	return c;  } -void skip_line(FILE *f) +static void skip_line(FILE *f)  {  	int c; @@ -31,7 +31,7 @@ void skip_line(FILE *f)  		;  } -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; @@ -39,7 +39,7 @@ static const char* url_escape_table[256] = {  	"%fe", "%ff"  }; -int htmlfd = STDOUT_FILENO; +static int htmlfd = STDOUT_FILENO;  char *fmt(const char *format, ...)  { @@ -266,7 +266,7 @@ int html_include(const char *filename)  	return 0;  } -int hextoint(char c) +static int hextoint(char c)  {  	if (c >= 'a' && c <= 'f')  		return 10 + c - 'a'; @@ -278,7 +278,7 @@ int hextoint(char c)  		return -1;  } -char *convert_query_hexchar(char *txt) +static char *convert_query_hexchar(char *txt)  {  	int d1, d2, n;  	n = strlen(txt); @@ -52,7 +52,7 @@ void cgit_parse_url(const char *url)  	}  } -char *substr(const char *head, const char *tail) +static char *substr(const char *head, const char *tail)  {  	char *buf; @@ -64,7 +64,7 @@ char *substr(const char *head, const char *tail)  	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 @@ char *parse_user(char *t, char **name, char **email, unsigned long *date)  #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; @@ -158,7 +158,7 @@ void cgit_add_ref(struct reflist *list, struct refinfo *ref)  	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 @@ struct refinfo *cgit_mk_refinfo(const char *refname, const unsigned char *sha1)  	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 @@ int cgit_refs_cb(const char *refname, const unsigned char *sha1, int flags,  	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 @@ static int load_mmfile(mmfile_t *file, const unsigned char *sha1)  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 @@ int readfile(const char *path, char **buf, size_t *size)  	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; @@ -10,7 +10,7 @@  #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 74f37c8..0783285 100644 --- a/ui-commit.c +++ b/ui-commit.c @@ -74,6 +74,7 @@ void cgit_print_commit(char *hex, const char *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); @@ -166,8 +166,9 @@ static void inspect_filepair(struct diff_filepair *pair)  	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; @@ -28,7 +28,7 @@ static const char *column_colors_html[] = {  #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 @@ void count_lines(char *line, int size)  		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 @@ 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; @@ -103,6 +103,7 @@ static void print_tag_downloads(const struct cgit_repo *repo, const char *ref)  	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 @@ static void print_tag_downloads(const struct cgit_repo *repo, const char *ref)  	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 @@ static void print_tag_downloads(const struct cgit_repo *repo, const char *ref)  		cgit_snapshot_link(filename, NULL, NULL, NULL, NULL, filename);  		html("  ");  	} + +	if (free_ref) +		free((char *)ref);  }  static int print_tag(struct refinfo *ref)  { @@ -205,6 +211,8 @@ void cgit_print_branches(int maxcount)  	if (maxcount < list.count)  		print_refs_link("heads"); + +	cgit_free_reflist_inner(&list);  }  void cgit_print_tags(int maxcount) @@ -229,6 +237,8 @@ void cgit_print_tags(int maxcount)  	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 1ae22aa..66c88c4 100644 --- a/ui-repolist.c +++ b/ui-repolist.c @@ -12,7 +12,7 @@  #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 @@ static void print_modtime(struct cgit_repo *repo)  		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 @@ int is_match(struct cgit_repo *repo)  	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 @@ int is_in_url(struct cgit_repo *repo)  	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 @@ void print_sort_header(const char *title, const char *sort)  	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 @@ void print_header()  } -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 @@ struct sortcolumn sortcolumn[] = {  	{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 80f4aee..968933f 100644 --- a/ui-shared.c +++ b/ui-shared.c @@ -121,18 +121,6 @@ const char *cgit_repobasename(const char *reponame)  	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 @@ void cgit_stats_link(const char *name, const char *title, const char *class,  	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 @@ void cgit_object_link(struct object *obj)  	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 @@ void cgit_print_docend()  	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&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 @@ void cgit_print_snapshot_links(const char *repo, const char *head,  		cgit_snapshot_link(filename, NULL, NULL, NULL, NULL, filename);  		html("<br/>");  	} +	free(prefix);  } diff --git a/ui-snapshot.c b/ui-snapshot.c index 54e659c..e199a92 100644 --- a/ui-snapshot.c +++ b/ui-snapshot.c @@ -153,7 +153,7 @@ static const char *get_ref_from_filename(const char *url, const char *filename,  	return NULL;  } -void show_error(char *msg) +static void show_error(char *msg)  {  	ctx.page.mimetype = "text/html";  	cgit_print_http_headers(&ctx); @@ -211,8 +211,8 @@ static int cmp_total_commits(const void *a1, const void *a2)  /* 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 @@ struct string_list collect_stats(struct cgit_context *ctx,  	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 @@ void print_combined_authorrow(struct string_list *authors, int from, int to,  	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; @@ -30,7 +30,7 @@ static void print_tag_content(char *buf)  	}  } -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, @@ -271,7 +271,6 @@ void cgit_print_tree(const char *rev, char *path)  	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 @@ void cgit_print_tree(const char *rev, char *path)  		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);  } | 
