X-Git-Url: https://gitweb.ps.run/ps-cgit/blobdiff_plain/bd9fb0324d776aa5583a70a6125fce47697701b1..6feb1b669b381452c1c2b4723bfd18275ecae350:/ui-stats.c diff --git a/ui-stats.c b/ui-stats.c index 9cd8247..40ed6c2 100644 --- a/ui-stats.c +++ b/ui-stats.c @@ -3,12 +3,6 @@ #include "html.h" #include "ui-shared.h" -#ifdef NO_C99_FORMAT -#define SZ_FMT "%u" -#else -#define SZ_FMT "%zu" -#endif - struct authorstat { long total; struct string_list list; @@ -172,8 +166,9 @@ static void add_commit(struct string_list *authors, struct commit *commit, struct authorstat *authorstat; struct string_list *items; char *tmp; - struct tm *date; + struct tm date; time_t t; + uintptr_t *counter; info = cgit_parse_commit(commit); tmp = xstrdup(info->author); @@ -185,13 +180,15 @@ static void add_commit(struct string_list *authors, struct commit *commit, authorstat = author->util; items = &authorstat->list; t = info->committer_date; - date = gmtime(&t); - period->trunc(date); - tmp = xstrdup(period->pretty(date)); + gmtime_r(&t, &date); + period->trunc(&date); + tmp = xstrdup(period->pretty(&date)); item = string_list_insert(items, tmp); - if (item->util) + counter = (uintptr_t *)&item->util; + if (*counter) free(tmp); - item->util++; + (*counter)++; + authorstat->total++; cgit_free_commitinfo(info); } @@ -218,15 +215,15 @@ static struct string_list collect_stats(const struct cgit_period *period) int argc = 3; time_t now; long i; - struct tm *tm; + struct tm tm; char tmp[11]; time(&now); - tm = gmtime(&now); - period->trunc(tm); + gmtime_r(&now, &tm); + period->trunc(&tm); for (i = 1; i < period->count; i++) - period->dec(tm); - strftime(tmp, sizeof(tmp), "%Y-%m-%d", tm); + period->dec(&tm); + strftime(tmp, sizeof(tmp), "%Y-%m-%d", &tm); argv[2] = xstrdup(fmt("--since=%s", tmp)); if (ctx.qry.path) { argv[3] = "--"; @@ -244,8 +241,7 @@ static struct string_list collect_stats(const struct cgit_period *period) memset(&authors, 0, sizeof(authors)); while ((commit = get_revision(&rev)) != NULL) { add_commit(&authors, commit, period); - free_commit_buffer(commit); - free_commit_list(commit->parents); + release_commit_memory(the_repository->parsed_objects, commit); commit->parents = NULL; } return authors; @@ -264,21 +260,21 @@ static void print_combined_authorrow(struct string_list *authors, int from, struct string_list_item *date; time_t now; long i, j, total, subtotal; - struct tm *tm; + struct tm tm; char *tmp; time(&now); - tm = gmtime(&now); - period->trunc(tm); + gmtime_r(&now, &tm); + period->trunc(&tm); for (i = 1; i < period->count; i++) - period->dec(tm); + period->dec(&tm); total = 0; htmlf("
| Author | "); for (j = 0; j < period->count; j++) { - tmp = period->pretty(tm); + tmp = period->pretty(&tm); htmlf("%s | ", tmp); - period->inc(tm); + period->inc(&tm); } html("Total | 0 | "); else { - htmlf(""SZ_FMT" | ", (size_t)date->util); - total += (size_t)date->util; + htmlf("%lu | ", (uintptr_t)date->util); + total += (uintptr_t)date->util; } } htmlf("%ld | ", total); @@ -372,11 +368,13 @@ void cgit_show_stats(void) i = cgit_find_stats_period(code, &period); if (!i) { - cgit_print_error("Unknown statistics type: %c", code[0]); + cgit_print_error_page(404, "Not found", + "Unknown statistics type: %c", code[0]); return; } if (i > ctx.repo->max_stats) { - cgit_print_error("Statistics type disabled: %s", period->name); + cgit_print_error_page(400, "Bad request", + "Statistics type disabled: %s", period->name); return; } authors = collect_stats(period); @@ -387,9 +385,10 @@ void cgit_show_stats(void) if (!top) top = 10; + cgit_print_layout_start(); html("
|---|