diff options
| -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, | |||
| 363 | /* Return a strftime formatted date/time | 363 | /* Return a strftime formatted date/time |
| 364 | * NB: the result from this function is to shared memory | 364 | * NB: the result from this function is to shared memory |
| 365 | */ | 365 | */ |
| 366 | char *sprintftime(const char *format, time_t time) | 366 | static char *sprintftime(const char *format, time_t time) |
| 367 | { | 367 | { |
| 368 | static char buf[64]; | 368 | static char buf[64]; |
| 369 | struct tm *tm; | 369 | struct tm *tm; |
| @@ -18,7 +18,7 @@ | |||
| 18 | 18 | ||
| 19 | const char *cgit_version = CGIT_VERSION; | 19 | const char *cgit_version = CGIT_VERSION; |
| 20 | 20 | ||
| 21 | void add_mimetype(const char *name, const char *value) | 21 | static void add_mimetype(const char *name, const char *value) |
| 22 | { | 22 | { |
| 23 | struct string_list_item *item; | 23 | struct string_list_item *item; |
| 24 | 24 | ||
| @@ -26,7 +26,7 @@ void add_mimetype(const char *name, const char *value) | |||
| 26 | item->util = xstrdup(value); | 26 | item->util = xstrdup(value); |
| 27 | } | 27 | } |
| 28 | 28 | ||
| 29 | struct cgit_filter *new_filter(const char *cmd, filter_type filtertype) | 29 | static struct cgit_filter *new_filter(const char *cmd, filter_type filtertype) |
| 30 | { | 30 | { |
| 31 | struct cgit_filter *f; | 31 | struct cgit_filter *f; |
| 32 | int args_size = 0; | 32 | int args_size = 0; |
| @@ -58,7 +58,7 @@ struct cgit_filter *new_filter(const char *cmd, filter_type filtertype) | |||
| 58 | 58 | ||
| 59 | static void process_cached_repolist(const char *path); | 59 | static void process_cached_repolist(const char *path); |
| 60 | 60 | ||
| 61 | void repo_config(struct cgit_repo *repo, const char *name, const char *value) | 61 | static void repo_config(struct cgit_repo *repo, const char *name, const char *value) |
| 62 | { | 62 | { |
| 63 | struct string_list_item *item; | 63 | struct string_list_item *item; |
| 64 | 64 | ||
| @@ -114,7 +114,7 @@ void repo_config(struct cgit_repo *repo, const char *name, const char *value) | |||
| 114 | } | 114 | } |
| 115 | } | 115 | } |
| 116 | 116 | ||
| 117 | void config_cb(const char *name, const char *value) | 117 | static void config_cb(const char *name, const char *value) |
| 118 | { | 118 | { |
| 119 | if (!strcmp(name, "section") || !strcmp(name, "repo.group")) | 119 | if (!strcmp(name, "section") || !strcmp(name, "repo.group")) |
| 120 | ctx.cfg.section = xstrdup(value); | 120 | ctx.cfg.section = xstrdup(value); |
| @@ -333,7 +333,7 @@ static void querystring_cb(const char *name, const char *value) | |||
| 333 | } | 333 | } |
| 334 | } | 334 | } |
| 335 | 335 | ||
| 336 | char *xstrdupn(const char *str) | 336 | static char *xstrdupn(const char *str) |
| 337 | { | 337 | { |
| 338 | return (str ? xstrdup(str) : NULL); | 338 | return (str ? xstrdup(str) : NULL); |
| 339 | } | 339 | } |
| @@ -414,8 +414,8 @@ struct refmatch { | |||
| 414 | int match; | 414 | int match; |
| 415 | }; | 415 | }; |
| 416 | 416 | ||
| 417 | int find_current_ref(const char *refname, const unsigned char *sha1, | 417 | static int find_current_ref(const char *refname, const unsigned char *sha1, |
| 418 | int flags, void *cb_data) | 418 | int flags, void *cb_data) |
| 419 | { | 419 | { |
| 420 | struct refmatch *info; | 420 | struct refmatch *info; |
| 421 | 421 | ||
| @@ -427,7 +427,13 @@ int find_current_ref(const char *refname, const unsigned char *sha1, | |||
| 427 | return info->match; | 427 | return info->match; |
| 428 | } | 428 | } |
| 429 | 429 | ||
| 430 | char *find_default_branch(struct cgit_repo *repo) | 430 | static void free_refmatch_inner(struct refmatch *info) |
| 431 | { | ||
| 432 | if (info->first_ref) | ||
| 433 | free(info->first_ref); | ||
| 434 | } | ||
| 435 | |||
| 436 | static char *find_default_branch(struct cgit_repo *repo) | ||
| 431 | { | 437 | { |
| 432 | struct refmatch info; | 438 | struct refmatch info; |
| 433 | char *ref; | 439 | char *ref; |
| @@ -442,6 +448,8 @@ char *find_default_branch(struct cgit_repo *repo) | |||
| 442 | ref = info.first_ref; | 448 | ref = info.first_ref; |
| 443 | if (ref) | 449 | if (ref) |
| 444 | ref = xstrdup(ref); | 450 | ref = xstrdup(ref); |
| 451 | free_refmatch_inner(&info); | ||
| 452 | |||
| 445 | return ref; | 453 | return ref; |
| 446 | } | 454 | } |
| 447 | 455 | ||
| @@ -569,13 +577,13 @@ static void process_request(void *cbdata) | |||
| 569 | cgit_print_docend(); | 577 | cgit_print_docend(); |
| 570 | } | 578 | } |
| 571 | 579 | ||
| 572 | int cmp_repos(const void *a, const void *b) | 580 | static int cmp_repos(const void *a, const void *b) |
| 573 | { | 581 | { |
| 574 | const struct cgit_repo *ra = a, *rb = b; | 582 | const struct cgit_repo *ra = a, *rb = b; |
| 575 | return strcmp(ra->url, rb->url); | 583 | return strcmp(ra->url, rb->url); |
| 576 | } | 584 | } |
| 577 | 585 | ||
| 578 | char *build_snapshot_setting(int bitmap) | 586 | static char *build_snapshot_setting(int bitmap) |
| 579 | { | 587 | { |
| 580 | const struct cgit_snapshot_format *f; | 588 | const struct cgit_snapshot_format *f; |
| 581 | char *result = xstrdup(""); | 589 | char *result = xstrdup(""); |
| @@ -595,7 +603,7 @@ char *build_snapshot_setting(int bitmap) | |||
| 595 | return result; | 603 | return result; |
| 596 | } | 604 | } |
| 597 | 605 | ||
| 598 | char *get_first_line(char *txt) | 606 | static char *get_first_line(char *txt) |
| 599 | { | 607 | { |
| 600 | char *t = xstrdup(txt); | 608 | char *t = xstrdup(txt); |
| 601 | char *p = strchr(t, '\n'); | 609 | char *p = strchr(t, '\n'); |
| @@ -604,7 +612,7 @@ char *get_first_line(char *txt) | |||
| 604 | return t; | 612 | return t; |
| 605 | } | 613 | } |
| 606 | 614 | ||
| 607 | void print_repo(FILE *f, struct cgit_repo *repo) | 615 | static void print_repo(FILE *f, struct cgit_repo *repo) |
| 608 | { | 616 | { |
| 609 | fprintf(f, "repo.url=%s\n", repo->url); | 617 | fprintf(f, "repo.url=%s\n", repo->url); |
| 610 | fprintf(f, "repo.name=%s\n", repo->name); | 618 | fprintf(f, "repo.name=%s\n", repo->name); |
| @@ -649,7 +657,7 @@ void print_repo(FILE *f, struct cgit_repo *repo) | |||
| 649 | fprintf(f, "\n"); | 657 | fprintf(f, "\n"); |
| 650 | } | 658 | } |
| 651 | 659 | ||
| 652 | void print_repolist(FILE *f, struct cgit_repolist *list, int start) | 660 | static void print_repolist(FILE *f, struct cgit_repolist *list, int start) |
| 653 | { | 661 | { |
| 654 | int i; | 662 | int i; |
| 655 | 663 | ||
| @@ -304,6 +304,7 @@ extern char *strlpart(char *txt, int maxlen); | |||
| 304 | extern char *strrpart(char *txt, int maxlen); | 304 | extern char *strrpart(char *txt, int maxlen); |
| 305 | 305 | ||
| 306 | extern void cgit_add_ref(struct reflist *list, struct refinfo *ref); | 306 | extern void cgit_add_ref(struct reflist *list, struct refinfo *ref); |
| 307 | extern void cgit_free_reflist_inner(struct reflist *list); | ||
| 307 | extern int cgit_refs_cb(const char *refname, const unsigned char *sha1, | 308 | extern int cgit_refs_cb(const char *refname, const unsigned char *sha1, |
| 308 | int flags, void *cb_data); | 309 | int flags, void *cb_data); |
| 309 | 310 | ||
diff --git a/configfile.c b/configfile.c index 3fa217f..d98989c 100644 --- a/configfile.c +++ b/configfile.c | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | #include <stdio.h> | 10 | #include <stdio.h> |
| 11 | #include "configfile.h" | 11 | #include "configfile.h" |
| 12 | 12 | ||
| 13 | int next_char(FILE *f) | 13 | static int next_char(FILE *f) |
| 14 | { | 14 | { |
| 15 | int c = fgetc(f); | 15 | int c = fgetc(f); |
| 16 | if (c == '\r') { | 16 | if (c == '\r') { |
| @@ -23,7 +23,7 @@ int next_char(FILE *f) | |||
| 23 | return c; | 23 | return c; |
| 24 | } | 24 | } |
| 25 | 25 | ||
| 26 | void skip_line(FILE *f) | 26 | static void skip_line(FILE *f) |
| 27 | { | 27 | { |
| 28 | int c; | 28 | int c; |
| 29 | 29 | ||
| @@ -31,7 +31,7 @@ void skip_line(FILE *f) | |||
| 31 | ; | 31 | ; |
| 32 | } | 32 | } |
| 33 | 33 | ||
| 34 | int read_config_line(FILE *f, char *line, const char **value, int bufsize) | 34 | static int read_config_line(FILE *f, char *line, const char **value, int bufsize) |
| 35 | { | 35 | { |
| 36 | int i = 0, isname = 0; | 36 | int i = 0, isname = 0; |
| 37 | 37 | ||
| @@ -39,7 +39,7 @@ static const char* url_escape_table[256] = { | |||
| 39 | "%fe", "%ff" | 39 | "%fe", "%ff" |
| 40 | }; | 40 | }; |
| 41 | 41 | ||
| 42 | int htmlfd = STDOUT_FILENO; | 42 | static int htmlfd = STDOUT_FILENO; |
| 43 | 43 | ||
| 44 | char *fmt(const char *format, ...) | 44 | char *fmt(const char *format, ...) |
| 45 | { | 45 | { |
| @@ -266,7 +266,7 @@ int html_include(const char *filename) | |||
| 266 | return 0; | 266 | return 0; |
| 267 | } | 267 | } |
| 268 | 268 | ||
| 269 | int hextoint(char c) | 269 | static int hextoint(char c) |
| 270 | { | 270 | { |
| 271 | if (c >= 'a' && c <= 'f') | 271 | if (c >= 'a' && c <= 'f') |
| 272 | return 10 + c - 'a'; | 272 | return 10 + c - 'a'; |
| @@ -278,7 +278,7 @@ int hextoint(char c) | |||
| 278 | return -1; | 278 | return -1; |
| 279 | } | 279 | } |
| 280 | 280 | ||
| 281 | char *convert_query_hexchar(char *txt) | 281 | static char *convert_query_hexchar(char *txt) |
| 282 | { | 282 | { |
| 283 | int d1, d2, n; | 283 | int d1, d2, n; |
| 284 | n = strlen(txt); | 284 | n = strlen(txt); |
| @@ -52,7 +52,7 @@ void cgit_parse_url(const char *url) | |||
| 52 | } | 52 | } |
| 53 | } | 53 | } |
| 54 | 54 | ||
| 55 | char *substr(const char *head, const char *tail) | 55 | static char *substr(const char *head, const char *tail) |
| 56 | { | 56 | { |
| 57 | char *buf; | 57 | char *buf; |
| 58 | 58 | ||
| @@ -64,7 +64,7 @@ char *substr(const char *head, const char *tail) | |||
| 64 | return buf; | 64 | return buf; |
| 65 | } | 65 | } |
| 66 | 66 | ||
| 67 | char *parse_user(char *t, char **name, char **email, unsigned long *date) | 67 | static char *parse_user(char *t, char **name, char **email, unsigned long *date) |
| 68 | { | 68 | { |
| 69 | char *p = t; | 69 | char *p = t; |
| 70 | int mode = 1; | 70 | int mode = 1; |
| @@ -101,7 +101,7 @@ char *parse_user(char *t, char **name, char **email, unsigned long *date) | |||
| 101 | #ifdef NO_ICONV | 101 | #ifdef NO_ICONV |
| 102 | #define reencode(a, b, c) | 102 | #define reencode(a, b, c) |
| 103 | #else | 103 | #else |
| 104 | const char *reencode(char **txt, const char *src_enc, const char *dst_enc) | 104 | static const char *reencode(char **txt, const char *src_enc, const char *dst_enc) |
| 105 | { | 105 | { |
| 106 | char *tmp; | 106 | char *tmp; |
| 107 | 107 | ||
| @@ -158,7 +158,7 @@ void cgit_add_ref(struct reflist *list, struct refinfo *ref) | |||
| 158 | list->refs[list->count++] = ref; | 158 | list->refs[list->count++] = ref; |
| 159 | } | 159 | } |
| 160 | 160 | ||
| 161 | struct refinfo *cgit_mk_refinfo(const char *refname, const unsigned char *sha1) | 161 | static struct refinfo *cgit_mk_refinfo(const char *refname, const unsigned char *sha1) |
| 162 | { | 162 | { |
| 163 | struct refinfo *ref; | 163 | struct refinfo *ref; |
| 164 | 164 | ||
| @@ -176,6 +176,42 @@ struct refinfo *cgit_mk_refinfo(const char *refname, const unsigned char *sha1) | |||
| 176 | return ref; | 176 | return ref; |
| 177 | } | 177 | } |
| 178 | 178 | ||
| 179 | static void cgit_free_taginfo(struct taginfo *tag) | ||
| 180 | { | ||
| 181 | if (tag->tagger) | ||
| 182 | free(tag->tagger); | ||
| 183 | if (tag->tagger_email) | ||
| 184 | free(tag->tagger_email); | ||
| 185 | if (tag->msg) | ||
| 186 | free(tag->msg); | ||
| 187 | free(tag); | ||
| 188 | } | ||
| 189 | |||
| 190 | static void cgit_free_refinfo(struct refinfo *ref) | ||
| 191 | { | ||
| 192 | if (ref->refname) | ||
| 193 | free((char *)ref->refname); | ||
| 194 | switch (ref->object->type) { | ||
| 195 | case OBJ_TAG: | ||
| 196 | cgit_free_taginfo(ref->tag); | ||
| 197 | break; | ||
| 198 | case OBJ_COMMIT: | ||
| 199 | cgit_free_commitinfo(ref->commit); | ||
| 200 | break; | ||
| 201 | } | ||
| 202 | free(ref); | ||
| 203 | } | ||
| 204 | |||
| 205 | void cgit_free_reflist_inner(struct reflist *list) | ||
| 206 | { | ||
| 207 | int i; | ||
| 208 | |||
| 209 | for (i = 0; i < list->count; i++) { | ||
| 210 | cgit_free_refinfo(list->refs[i]); | ||
| 211 | } | ||
| 212 | free(list->refs); | ||
| 213 | } | ||
| 214 | |||
| 179 | int cgit_refs_cb(const char *refname, const unsigned char *sha1, int flags, | 215 | int cgit_refs_cb(const char *refname, const unsigned char *sha1, int flags, |
| 180 | void *cb_data) | 216 | void *cb_data) |
| 181 | { | 217 | { |
| @@ -187,8 +223,8 @@ int cgit_refs_cb(const char *refname, const unsigned char *sha1, int flags, | |||
| 187 | return 0; | 223 | return 0; |
| 188 | } | 224 | } |
| 189 | 225 | ||
| 190 | void cgit_diff_tree_cb(struct diff_queue_struct *q, | 226 | static void cgit_diff_tree_cb(struct diff_queue_struct *q, |
| 191 | struct diff_options *options, void *data) | 227 | struct diff_options *options, void *data) |
| 192 | { | 228 | { |
| 193 | int i; | 229 | int i; |
| 194 | 230 | ||
| @@ -224,7 +260,7 @@ static int load_mmfile(mmfile_t *file, const unsigned char *sha1) | |||
| 224 | char *diffbuf = NULL; | 260 | char *diffbuf = NULL; |
| 225 | int buflen = 0; | 261 | int buflen = 0; |
| 226 | 262 | ||
| 227 | int filediff_cb(void *priv, mmbuffer_t *mb, int nbuf) | 263 | static int filediff_cb(void *priv, mmbuffer_t *mb, int nbuf) |
| 228 | { | 264 | { |
| 229 | int i; | 265 | int i; |
| 230 | 266 | ||
| @@ -461,14 +497,14 @@ int readfile(const char *path, char **buf, size_t *size) | |||
| 461 | return (*size == st.st_size ? 0 : e); | 497 | return (*size == st.st_size ? 0 : e); |
| 462 | } | 498 | } |
| 463 | 499 | ||
| 464 | int is_token_char(char c) | 500 | static int is_token_char(char c) |
| 465 | { | 501 | { |
| 466 | return isalnum(c) || c == '_'; | 502 | return isalnum(c) || c == '_'; |
| 467 | } | 503 | } |
| 468 | 504 | ||
| 469 | /* Replace name with getenv(name), return pointer to zero-terminating char | 505 | /* Replace name with getenv(name), return pointer to zero-terminating char |
| 470 | */ | 506 | */ |
| 471 | char *expand_macro(char *name, int maxlength) | 507 | static char *expand_macro(char *name, int maxlength) |
| 472 | { | 508 | { |
| 473 | char *value; | 509 | char *value; |
| 474 | int len; | 510 | int len; |
| @@ -10,7 +10,7 @@ | |||
| 10 | #include "html.h" | 10 | #include "html.h" |
| 11 | #include "ui-shared.h" | 11 | #include "ui-shared.h" |
| 12 | 12 | ||
| 13 | void add_entry(struct commit *commit, char *host) | 13 | static void add_entry(struct commit *commit, char *host) |
| 14 | { | 14 | { |
| 15 | char delim = '&'; | 15 | char delim = '&'; |
| 16 | char *hex; | 16 | 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) | |||
| 74 | html(" /"); | 74 | html(" /"); |
| 75 | cgit_tree_link(prefix, NULL, NULL, ctx.qry.head, tmp, prefix); | 75 | cgit_tree_link(prefix, NULL, NULL, ctx.qry.head, tmp, prefix); |
| 76 | } | 76 | } |
| 77 | free(tmp); | ||
| 77 | html("</td></tr>\n"); | 78 | html("</td></tr>\n"); |
| 78 | for (p = commit->parents; p; p = p->next) { | 79 | for (p = commit->parents; p; p = p->next) { |
| 79 | parent = lookup_commit_reference(p->item->object.sha1); | 80 | parent = lookup_commit_reference(p->item->object.sha1); |
| @@ -166,8 +166,9 @@ static void inspect_filepair(struct diff_filepair *pair) | |||
| 166 | total_rems += lines_removed; | 166 | total_rems += lines_removed; |
| 167 | } | 167 | } |
| 168 | 168 | ||
| 169 | void cgit_print_diffstat(const unsigned char *old_sha1, | 169 | static void cgit_print_diffstat(const unsigned char *old_sha1, |
| 170 | const unsigned char *new_sha1, const char *prefix) | 170 | const unsigned char *new_sha1, |
| 171 | const char *prefix) | ||
| 171 | { | 172 | { |
| 172 | int i; | 173 | int i; |
| 173 | 174 | ||
| @@ -28,7 +28,7 @@ static const char *column_colors_html[] = { | |||
| 28 | 28 | ||
| 29 | #define COLUMN_COLORS_HTML_MAX (ARRAY_SIZE(column_colors_html) - 1) | 29 | #define COLUMN_COLORS_HTML_MAX (ARRAY_SIZE(column_colors_html) - 1) |
| 30 | 30 | ||
| 31 | void count_lines(char *line, int size) | 31 | static void count_lines(char *line, int size) |
| 32 | { | 32 | { |
| 33 | if (size <= 0) | 33 | if (size <= 0) |
| 34 | return; | 34 | return; |
| @@ -40,7 +40,7 @@ void count_lines(char *line, int size) | |||
| 40 | rem_lines++; | 40 | rem_lines++; |
| 41 | } | 41 | } |
| 42 | 42 | ||
| 43 | void inspect_files(struct diff_filepair *pair) | 43 | static void inspect_files(struct diff_filepair *pair) |
| 44 | { | 44 | { |
| 45 | unsigned long old_size = 0; | 45 | unsigned long old_size = 0; |
| 46 | unsigned long new_size = 0; | 46 | unsigned long new_size = 0; |
| @@ -95,7 +95,7 @@ next: | |||
| 95 | } | 95 | } |
| 96 | } | 96 | } |
| 97 | 97 | ||
| 98 | void print_commit(struct commit *commit, struct rev_info *revs) | 98 | static void print_commit(struct commit *commit, struct rev_info *revs) |
| 99 | { | 99 | { |
| 100 | struct commitinfo *info; | 100 | struct commitinfo *info; |
| 101 | int cols = revs->graph ? 3 : 2; | 101 | int cols = revs->graph ? 3 : 2; |
| @@ -103,6 +103,7 @@ static void print_tag_downloads(const struct cgit_repo *repo, const char *ref) | |||
| 103 | const struct cgit_snapshot_format* f; | 103 | const struct cgit_snapshot_format* f; |
| 104 | char *filename; | 104 | char *filename; |
| 105 | const char *basename; | 105 | const char *basename; |
| 106 | int free_ref = 0; | ||
| 106 | 107 | ||
| 107 | if (!ref || strlen(ref) < 2) | 108 | if (!ref || strlen(ref) < 2) |
| 108 | return; | 109 | return; |
| @@ -111,8 +112,10 @@ static void print_tag_downloads(const struct cgit_repo *repo, const char *ref) | |||
| 111 | if (prefixcmp(ref, basename) != 0) { | 112 | if (prefixcmp(ref, basename) != 0) { |
| 112 | if ((ref[0] == 'v' || ref[0] == 'V') && isdigit(ref[1])) | 113 | if ((ref[0] == 'v' || ref[0] == 'V') && isdigit(ref[1])) |
| 113 | ref++; | 114 | ref++; |
| 114 | if (isdigit(ref[0])) | 115 | if (isdigit(ref[0])) { |
| 115 | ref = xstrdup(fmt("%s-%s", basename, ref)); | 116 | ref = xstrdup(fmt("%s-%s", basename, ref)); |
| 117 | free_ref = 1; | ||
| 118 | } | ||
| 116 | } | 119 | } |
| 117 | 120 | ||
| 118 | for (f = cgit_snapshot_formats; f->suffix; f++) { | 121 | 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) | |||
| 122 | cgit_snapshot_link(filename, NULL, NULL, NULL, NULL, filename); | 125 | cgit_snapshot_link(filename, NULL, NULL, NULL, NULL, filename); |
| 123 | html(" "); | 126 | html(" "); |
| 124 | } | 127 | } |
| 128 | |||
| 129 | if (free_ref) | ||
| 130 | free((char *)ref); | ||
| 125 | } | 131 | } |
| 126 | static int print_tag(struct refinfo *ref) | 132 | static int print_tag(struct refinfo *ref) |
| 127 | { | 133 | { |
| @@ -205,6 +211,8 @@ void cgit_print_branches(int maxcount) | |||
| 205 | 211 | ||
| 206 | if (maxcount < list.count) | 212 | if (maxcount < list.count) |
| 207 | print_refs_link("heads"); | 213 | print_refs_link("heads"); |
| 214 | |||
| 215 | cgit_free_reflist_inner(&list); | ||
| 208 | } | 216 | } |
| 209 | 217 | ||
| 210 | void cgit_print_tags(int maxcount) | 218 | void cgit_print_tags(int maxcount) |
| @@ -229,6 +237,8 @@ void cgit_print_tags(int maxcount) | |||
| 229 | 237 | ||
| 230 | if (maxcount < list.count) | 238 | if (maxcount < list.count) |
| 231 | print_refs_link("tags"); | 239 | print_refs_link("tags"); |
| 240 | |||
| 241 | cgit_free_reflist_inner(&list); | ||
| 232 | } | 242 | } |
| 233 | 243 | ||
| 234 | void cgit_print_refs() | 244 | 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 @@ | |||
| 12 | #include "ui-shared.h" | 12 | #include "ui-shared.h" |
| 13 | #include <strings.h> | 13 | #include <strings.h> |
| 14 | 14 | ||
| 15 | time_t read_agefile(char *path) | 15 | static time_t read_agefile(char *path) |
| 16 | { | 16 | { |
| 17 | time_t result; | 17 | time_t result; |
| 18 | size_t size; | 18 | size_t size; |
| @@ -76,7 +76,7 @@ static void print_modtime(struct cgit_repo *repo) | |||
| 76 | cgit_print_age(t, -1, NULL); | 76 | cgit_print_age(t, -1, NULL); |
| 77 | } | 77 | } |
| 78 | 78 | ||
| 79 | int is_match(struct cgit_repo *repo) | 79 | static int is_match(struct cgit_repo *repo) |
| 80 | { | 80 | { |
| 81 | if (!ctx.qry.search) | 81 | if (!ctx.qry.search) |
| 82 | return 1; | 82 | return 1; |
| @@ -91,7 +91,7 @@ int is_match(struct cgit_repo *repo) | |||
| 91 | return 0; | 91 | return 0; |
| 92 | } | 92 | } |
| 93 | 93 | ||
| 94 | int is_in_url(struct cgit_repo *repo) | 94 | static int is_in_url(struct cgit_repo *repo) |
| 95 | { | 95 | { |
| 96 | if (!ctx.qry.url) | 96 | if (!ctx.qry.url) |
| 97 | return 1; | 97 | return 1; |
| @@ -100,7 +100,7 @@ int is_in_url(struct cgit_repo *repo) | |||
| 100 | return 0; | 100 | return 0; |
| 101 | } | 101 | } |
| 102 | 102 | ||
| 103 | void print_sort_header(const char *title, const char *sort) | 103 | static void print_sort_header(const char *title, const char *sort) |
| 104 | { | 104 | { |
| 105 | htmlf("<th class='left'><a href='%s?s=%s", cgit_rooturl(), sort); | 105 | htmlf("<th class='left'><a href='%s?s=%s", cgit_rooturl(), sort); |
| 106 | if (ctx.qry.search) { | 106 | if (ctx.qry.search) { |
| @@ -110,7 +110,7 @@ void print_sort_header(const char *title, const char *sort) | |||
| 110 | htmlf("'>%s</a></th>", title); | 110 | htmlf("'>%s</a></th>", title); |
| 111 | } | 111 | } |
| 112 | 112 | ||
| 113 | void print_header() | 113 | static void print_header() |
| 114 | { | 114 | { |
| 115 | html("<tr class='nohover'>"); | 115 | html("<tr class='nohover'>"); |
| 116 | print_sort_header("Name", "name"); | 116 | print_sort_header("Name", "name"); |
| @@ -124,7 +124,7 @@ void print_header() | |||
| 124 | } | 124 | } |
| 125 | 125 | ||
| 126 | 126 | ||
| 127 | void print_pager(int items, int pagelen, char *search, char *sort) | 127 | static void print_pager(int items, int pagelen, char *search, char *sort) |
| 128 | { | 128 | { |
| 129 | int i, ofs; | 129 | int i, ofs; |
| 130 | char *class = NULL; | 130 | char *class = NULL; |
| @@ -223,7 +223,7 @@ struct sortcolumn sortcolumn[] = { | |||
| 223 | {NULL, NULL} | 223 | {NULL, NULL} |
| 224 | }; | 224 | }; |
| 225 | 225 | ||
| 226 | int sort_repolist(char *field) | 226 | static int sort_repolist(char *field) |
| 227 | { | 227 | { |
| 228 | struct sortcolumn *column; | 228 | struct sortcolumn *column; |
| 229 | 229 | ||
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) | |||
| 121 | return rvbuf; | 121 | return rvbuf; |
| 122 | } | 122 | } |
| 123 | 123 | ||
| 124 | char *cgit_currurl() | ||
| 125 | { | ||
| 126 | if (!ctx.cfg.virtual_root) | ||
| 127 | return ctx.cfg.script_name; | ||
| 128 | else if (ctx.qry.page) | ||
| 129 | return fmt("%s/%s/%s/", ctx.cfg.virtual_root, ctx.qry.repo, ctx.qry.page); | ||
| 130 | else if (ctx.qry.repo) | ||
| 131 | return fmt("%s/%s/", ctx.cfg.virtual_root, ctx.qry.repo); | ||
| 132 | else | ||
| 133 | return fmt("%s/", ctx.cfg.virtual_root); | ||
| 134 | } | ||
| 135 | |||
| 136 | static void site_url(const char *page, const char *search, const char *sort, int ofs) | 124 | static void site_url(const char *page, const char *search, const char *sort, int ofs) |
| 137 | { | 125 | { |
| 138 | char *delim = "?"; | 126 | char *delim = "?"; |
| @@ -433,8 +421,8 @@ void cgit_stats_link(const char *name, const char *title, const char *class, | |||
| 433 | reporevlink("stats", name, title, class, head, NULL, path); | 421 | reporevlink("stats", name, title, class, head, NULL, path); |
| 434 | } | 422 | } |
| 435 | 423 | ||
| 436 | void cgit_self_link(char *name, const char *title, const char *class, | 424 | static void cgit_self_link(char *name, const char *title, const char *class, |
| 437 | struct cgit_context *ctx) | 425 | struct cgit_context *ctx) |
| 438 | { | 426 | { |
| 439 | if (!strcmp(ctx->qry.page, "repolist")) | 427 | if (!strcmp(ctx->qry.page, "repolist")) |
| 440 | cgit_index_link(name, title, class, ctx->qry.search, ctx->qry.sort, | 428 | cgit_index_link(name, title, class, ctx->qry.search, ctx->qry.sort, |
| @@ -513,8 +501,8 @@ void cgit_object_link(struct object *obj) | |||
| 513 | reporevlink(page, name, NULL, NULL, ctx.qry.head, fullrev, NULL); | 501 | reporevlink(page, name, NULL, NULL, ctx.qry.head, fullrev, NULL); |
| 514 | } | 502 | } |
| 515 | 503 | ||
| 516 | struct string_list_item *lookup_path(struct string_list *list, | 504 | static struct string_list_item *lookup_path(struct string_list *list, |
| 517 | const char *path) | 505 | const char *path) |
| 518 | { | 506 | { |
| 519 | struct string_list_item *item; | 507 | struct string_list_item *item; |
| 520 | 508 | ||
| @@ -717,53 +705,14 @@ void cgit_print_docend() | |||
| 717 | html("</body>\n</html>\n"); | 705 | html("</body>\n</html>\n"); |
| 718 | } | 706 | } |
| 719 | 707 | ||
| 720 | int print_branch_option(const char *refname, const unsigned char *sha1, | 708 | static int print_branch_option(const char *refname, const unsigned char *sha1, |
| 721 | int flags, void *cb_data) | 709 | int flags, void *cb_data) |
| 722 | { | 710 | { |
| 723 | char *name = (char *)refname; | 711 | char *name = (char *)refname; |
| 724 | html_option(name, name, ctx.qry.head); | 712 | html_option(name, name, ctx.qry.head); |
| 725 | return 0; | 713 | return 0; |
| 726 | } | 714 | } |
| 727 | 715 | ||
| 728 | int print_archive_ref(const char *refname, const unsigned char *sha1, | ||
| 729 | int flags, void *cb_data) | ||
| 730 | { | ||
| 731 | struct tag *tag; | ||
| 732 | struct taginfo *info; | ||
| 733 | struct object *obj; | ||
| 734 | char buf[256], *url; | ||
| 735 | unsigned char fileid[20]; | ||
| 736 | int *header = (int *)cb_data; | ||
| 737 | |||
| 738 | if (prefixcmp(refname, "refs/archives")) | ||
| 739 | return 0; | ||
| 740 | strncpy(buf, refname + 14, sizeof(buf)); | ||
| 741 | obj = parse_object(sha1); | ||
| 742 | if (!obj) | ||
| 743 | return 1; | ||
| 744 | if (obj->type == OBJ_TAG) { | ||
| 745 | tag = lookup_tag(sha1); | ||
| 746 | if (!tag || parse_tag(tag) || !(info = cgit_parse_tag(tag))) | ||
| 747 | return 0; | ||
| 748 | hashcpy(fileid, tag->tagged->sha1); | ||
| 749 | } else if (obj->type != OBJ_BLOB) { | ||
| 750 | return 0; | ||
| 751 | } else { | ||
| 752 | hashcpy(fileid, sha1); | ||
| 753 | } | ||
| 754 | if (!*header) { | ||
| 755 | html("<h1>download</h1>\n"); | ||
| 756 | *header = 1; | ||
| 757 | } | ||
| 758 | url = cgit_pageurl(ctx.qry.repo, "blob", | ||
| 759 | fmt("id=%s&path=%s", sha1_to_hex(fileid), | ||
| 760 | buf)); | ||
| 761 | html_link_open(url, NULL, "menu"); | ||
| 762 | html_txt(strlpart(buf, 20)); | ||
| 763 | html_link_close(); | ||
| 764 | return 0; | ||
| 765 | } | ||
| 766 | |||
| 767 | void cgit_add_hidden_formfields(int incl_head, int incl_search, | 716 | void cgit_add_hidden_formfields(int incl_head, int incl_search, |
| 768 | const char *page) | 717 | const char *page) |
| 769 | { | 718 | { |
| @@ -983,4 +932,5 @@ void cgit_print_snapshot_links(const char *repo, const char *head, | |||
| 983 | cgit_snapshot_link(filename, NULL, NULL, NULL, NULL, filename); | 932 | cgit_snapshot_link(filename, NULL, NULL, NULL, NULL, filename); |
| 984 | html("<br/>"); | 933 | html("<br/>"); |
| 985 | } | 934 | } |
| 935 | free(prefix); | ||
| 986 | } | 936 | } |
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, | |||
| 153 | return NULL; | 153 | return NULL; |
| 154 | } | 154 | } |
| 155 | 155 | ||
| 156 | void show_error(char *msg) | 156 | static void show_error(char *msg) |
| 157 | { | 157 | { |
| 158 | ctx.page.mimetype = "text/html"; | 158 | ctx.page.mimetype = "text/html"; |
| 159 | cgit_print_http_headers(&ctx); | 159 | cgit_print_http_headers(&ctx); |
| @@ -211,8 +211,8 @@ static int cmp_total_commits(const void *a1, const void *a2) | |||
| 211 | /* Walk the commit DAG and collect number of commits per author per | 211 | /* Walk the commit DAG and collect number of commits per author per |
| 212 | * timeperiod into a nested string_list collection. | 212 | * timeperiod into a nested string_list collection. |
| 213 | */ | 213 | */ |
| 214 | struct string_list collect_stats(struct cgit_context *ctx, | 214 | static struct string_list collect_stats(struct cgit_context *ctx, |
| 215 | struct cgit_period *period) | 215 | struct cgit_period *period) |
| 216 | { | 216 | { |
| 217 | struct string_list authors; | 217 | struct string_list authors; |
| 218 | struct rev_info rev; | 218 | struct rev_info rev; |
| @@ -253,9 +253,12 @@ struct string_list collect_stats(struct cgit_context *ctx, | |||
| 253 | return authors; | 253 | return authors; |
| 254 | } | 254 | } |
| 255 | 255 | ||
| 256 | void print_combined_authorrow(struct string_list *authors, int from, int to, | 256 | static void print_combined_authorrow(struct string_list *authors, int from, |
| 257 | const char *name, const char *leftclass, const char *centerclass, | 257 | int to, const char *name, |
| 258 | const char *rightclass, struct cgit_period *period) | 258 | const char *leftclass, |
| 259 | const char *centerclass, | ||
| 260 | const char *rightclass, | ||
| 261 | struct cgit_period *period) | ||
| 259 | { | 262 | { |
| 260 | struct string_list_item *author; | 263 | struct string_list_item *author; |
| 261 | struct authorstat *authorstat; | 264 | struct authorstat *authorstat; |
| @@ -293,8 +296,8 @@ void print_combined_authorrow(struct string_list *authors, int from, int to, | |||
| 293 | htmlf("<td class='%s'>%ld</td></tr>", rightclass, total); | 296 | htmlf("<td class='%s'>%ld</td></tr>", rightclass, total); |
| 294 | } | 297 | } |
| 295 | 298 | ||
| 296 | void print_authors(struct string_list *authors, int top, | 299 | static void print_authors(struct string_list *authors, int top, |
| 297 | struct cgit_period *period) | 300 | struct cgit_period *period) |
| 298 | { | 301 | { |
| 299 | struct string_list_item *author; | 302 | struct string_list_item *author; |
| 300 | struct authorstat *authorstat; | 303 | struct authorstat *authorstat; |
| @@ -30,7 +30,7 @@ static void print_tag_content(char *buf) | |||
| 30 | } | 30 | } |
| 31 | } | 31 | } |
| 32 | 32 | ||
| 33 | void print_download_links(char *revname) | 33 | static void print_download_links(char *revname) |
| 34 | { | 34 | { |
| 35 | html("<tr><th>download</th><td class='sha1'>"); | 35 | html("<tr><th>download</th><td class='sha1'>"); |
| 36 | cgit_print_snapshot_links(ctx.qry.repo, ctx.qry.head, | 36 | cgit_print_snapshot_links(ctx.qry.repo, ctx.qry.head, |
| @@ -271,7 +271,6 @@ void cgit_print_tree(const char *rev, char *path) | |||
| 271 | if (!rev) | 271 | if (!rev) |
| 272 | rev = ctx.qry.head; | 272 | rev = ctx.qry.head; |
| 273 | 273 | ||
| 274 | walk_tree_ctx.curr_rev = xstrdup(rev); | ||
| 275 | if (get_sha1(rev, sha1)) { | 274 | if (get_sha1(rev, sha1)) { |
| 276 | cgit_print_error(fmt("Invalid revision name: %s", rev)); | 275 | cgit_print_error(fmt("Invalid revision name: %s", rev)); |
| 277 | return; | 276 | return; |
| @@ -282,12 +281,17 @@ void cgit_print_tree(const char *rev, char *path) | |||
| 282 | return; | 281 | return; |
| 283 | } | 282 | } |
| 284 | 283 | ||
| 284 | walk_tree_ctx.curr_rev = xstrdup(rev); | ||
| 285 | |||
| 285 | if (path == NULL) { | 286 | if (path == NULL) { |
| 286 | ls_tree(commit->tree->object.sha1, NULL, &walk_tree_ctx); | 287 | ls_tree(commit->tree->object.sha1, NULL, &walk_tree_ctx); |
| 287 | return; | 288 | goto cleanup; |
| 288 | } | 289 | } |
| 289 | 290 | ||
| 290 | read_tree_recursive(commit->tree, "", 0, 0, &paths, walk_tree, &walk_tree_ctx); | 291 | read_tree_recursive(commit->tree, "", 0, 0, &paths, walk_tree, &walk_tree_ctx); |
| 291 | if (walk_tree_ctx.state == 1) | 292 | if (walk_tree_ctx.state == 1) |
| 292 | ls_tail(); | 293 | ls_tail(); |
| 294 | |||
| 295 | cleanup: | ||
| 296 | free(walk_tree_ctx.curr_rev); | ||
| 293 | } | 297 | } |
