From: Omar Polo Subject: gotwebd: turn gotweb_get_time_str into gotweb_render_age To: gameoftrees@openbsd.org Date: Sat, 21 Jan 2023 19:46:21 +0100 gotweb_get_time_str was once used to allocate string to be then printed via fcgi_printf. We've moved everything through template so (except for a single case) there's no need to dynamically allocate the string for later use. Diff below then turns gotweb_get_time_str into gotweb_render_age by directly outputting the string. The only usage left was in got_operations.c to get the repository last modification date that was changed to return the time_t instead. ok? ----------------------------------------------- commit 88a82656f65fee52fe135baccb76624ae8e1e2e4 (x) from: Omar Polo date: Sat Jan 21 18:37:49 2023 UTC gotwebd: turn gotweb_get_time_str into gotweb_render_age M gotwebd/got_operations.c | 3+ 7- M gotwebd/gotweb.c | 30+ 33- M gotwebd/gotwebd.h | 4+ 4- M gotwebd/pages.tmpl | 9+ 22- 4 files changed, 46 insertions(+), 66 deletions(-) diff 6cdf29f9353bcea609dcbab90131634430ac5a18 88a82656f65fee52fe135baccb76624ae8e1e2e4 commit - 6cdf29f9353bcea609dcbab90131634430ac5a18 commit + 88a82656f65fee52fe135baccb76624ae8e1e2e4 blob - 50bc0de73e23d3f59b30e2eecb24a96fbc5ce5bf blob + 78b5a2623d4338f679a254321a0a0647a5ff85fd --- gotwebd/got_operations.c +++ gotwebd/got_operations.c @@ -126,8 +126,7 @@ got_get_repo_age(char **repo_age, struct request *c, } const struct got_error * -got_get_repo_age(char **repo_age, struct request *c, - const char *refname, int ref_tm) +got_get_repo_age(time_t *repo_age, struct request *c, const char *refname) { const struct got_error *error = NULL; struct server *srv = c->srv; @@ -138,7 +137,6 @@ got_get_repo_age(char **repo_age, struct request *c, struct got_reflist_entry *re; time_t committer_time = 0, cmp_time = 0; - *repo_age = NULL; TAILQ_INIT(&refs); if (srv->show_repo_age == 0) @@ -178,10 +176,8 @@ got_get_repo_age(char **repo_age, struct request *c, break; } - if (cmp_time != 0) { - committer_time = cmp_time; - error = gotweb_get_time_str(repo_age, committer_time, ref_tm); - } + if (cmp_time != 0) + *repo_age = cmp_time; done: got_ref_list_free(&refs); return error; blob - 47ec70cd7f1ff4721930aa83409682012b4e6d60 blob + de3c351cbe1ced66e0a1e55b0df7afae4fe2b894 --- gotwebd/gotweb.c +++ gotwebd/gotweb.c @@ -761,7 +761,6 @@ gotweb_free_repo_dir(struct repo_dir *repo_dir) free(repo_dir->owner); free(repo_dir->description); free(repo_dir->url); - free(repo_dir->age); free(repo_dir->path); } free(repo_dir); @@ -1337,7 +1336,7 @@ done: error = got_get_repo_owner(&repo_dir->owner, c); if (error) goto err; - error = got_get_repo_age(&repo_dir->age, c, NULL, TM_DIFF); + error = got_get_repo_age(&repo_dir->age, c, NULL); if (error) goto err; error = gotweb_get_clone_url(&repo_dir->url, srv, repo_dir->path, @@ -1367,7 +1366,6 @@ gotweb_init_repo_dir(struct repo_dir **repo_dir, const (*repo_dir)->owner = NULL; (*repo_dir)->description = NULL; (*repo_dir)->url = NULL; - (*repo_dir)->age = NULL; (*repo_dir)->path = NULL; return NULL; @@ -1465,9 +1463,10 @@ const struct got_error * return error; } -const struct got_error * -gotweb_get_time_str(char **repo_age, time_t committer_time, int ref_tm) +int +gotweb_render_age(struct template *tp, time_t committer_time, int ref_tm) { + struct request *c = tp->tp_arg; struct tm tm; long long diff_time; const char *years = "years ago", *months = "months ago"; @@ -1478,69 +1477,67 @@ gotweb_get_time_str(char **repo_age, time_t committer_ char datebuf[64]; size_t r; - *repo_age = NULL; - switch (ref_tm) { case TM_DIFF: diff_time = time(NULL) - committer_time; if (diff_time > 60 * 60 * 24 * 365 * 2) { - if (asprintf(repo_age, "%lld %s", + if (fcgi_printf(c, "%lld %s", (diff_time / 60 / 60 / 24 / 365), years) == -1) - return got_error_from_errno("asprintf"); + return -1; } else if (diff_time > 60 * 60 * 24 * (365 / 12) * 2) { - if (asprintf(repo_age, "%lld %s", + if (fcgi_printf(c, "%lld %s", (diff_time / 60 / 60 / 24 / (365 / 12)), months) == -1) - return got_error_from_errno("asprintf"); + return -1; } else if (diff_time > 60 * 60 * 24 * 7 * 2) { - if (asprintf(repo_age, "%lld %s", + if (fcgi_printf(c, "%lld %s", (diff_time / 60 / 60 / 24 / 7), weeks) == -1) - return got_error_from_errno("asprintf"); + return -1; } else if (diff_time > 60 * 60 * 24 * 2) { - if (asprintf(repo_age, "%lld %s", + if (fcgi_printf(c, "%lld %s", (diff_time / 60 / 60 / 24), days) == -1) - return got_error_from_errno("asprintf"); + return -1; } else if (diff_time > 60 * 60 * 2) { - if (asprintf(repo_age, "%lld %s", + if (fcgi_printf(c, "%lld %s", (diff_time / 60 / 60), hours) == -1) - return got_error_from_errno("asprintf"); + return -1; } else if (diff_time > 60 * 2) { - if (asprintf(repo_age, "%lld %s", (diff_time / 60), + if (fcgi_printf(c, "%lld %s", (diff_time / 60), minutes) == -1) - return got_error_from_errno("asprintf"); + return -1; } else if (diff_time > 2) { - if (asprintf(repo_age, "%lld %s", diff_time, + if (fcgi_printf(c, "%lld %s", diff_time, seconds) == -1) - return got_error_from_errno("asprintf"); + return -1; } else { - if (asprintf(repo_age, "%s", now) == -1) - return got_error_from_errno("asprintf"); + if (fcgi_puts(tp, now) == -1) + return -1; } break; case TM_LONG: if (gmtime_r(&committer_time, &tm) == NULL) - return got_error_from_errno("gmtime_r"); + return -1; s = asctime_r(&tm, datebuf); if (s == NULL) - return got_error_from_errno("asctime_r"); + return -1; - if (asprintf(repo_age, "%s UTC", datebuf) == -1) - return got_error_from_errno("asprintf"); + if (fcgi_puts(tp, datebuf) == -1 || + fcgi_puts(tp, " UTC") == -1) + return -1; break; case TM_RFC822: if (gmtime_r(&committer_time, &tm) == NULL) - return got_error_from_errno("gmtime_r"); + return -1; r = strftime(datebuf, sizeof(datebuf), "%a, %d %b %Y %H:%M:%S GMT", &tm); if (r == 0) - return got_error(GOT_ERR_NO_SPACE); + return -1; - *repo_age = strdup(datebuf); - if (*repo_age == NULL) - return got_error_from_errno("asprintf"); + if (fcgi_puts(tp, datebuf) == -1) + return -1; break; } - return NULL; + return 0; } blob - 3b5d3050768b060fb3d989730d25bac381291c95 blob + b84fe9526fa6e65fe446b6bdf8b85d2b63e73233 --- gotwebd/gotwebd.h +++ gotwebd/gotwebd.h @@ -155,7 +155,7 @@ struct repo_dir { char *owner; char *description; char *url; - char *age; + time_t age; char *path; }; @@ -451,7 +451,7 @@ const struct got_error *gotweb_get_time_str(char **, t /* gotweb.c */ void gotweb_get_navs(struct request *, struct gotweb_url *, int *, struct gotweb_url *, int *); -const struct got_error *gotweb_get_time_str(char **, time_t, int); +int gotweb_render_age(struct template *, time_t, int); const struct got_error *gotweb_init_transport(struct transport **); const char *gotweb_action_name(int); int gotweb_render_url(struct request *, struct gotweb_url *); @@ -500,8 +500,8 @@ const struct got_error *got_get_repo_age(char **, stru /* got_operations.c */ const struct got_error *got_gotweb_flushfile(FILE *, int); const struct got_error *got_get_repo_owner(char **, struct request *); -const struct got_error *got_get_repo_age(char **, struct request *, - const char *, int); +const struct got_error *got_get_repo_age(time_t *, struct request *, + const char *); const struct got_error *got_get_repo_commits(struct request *, int); const struct got_error *got_get_repo_tags(struct request *, int); const struct got_error *got_get_repo_heads(struct request *); blob - 6325fdc6ed674e01b958b4cd26fb051e5c7f6a4c blob + bd93fb21ec16695dbf29784ea4a8d2de3efdecac --- gotwebd/pages.tmpl +++ gotwebd/pages.tmpl @@ -49,21 +49,6 @@ static int static inline int rss_tag_item(struct template *, struct repo_tag *); static inline int rss_author(struct template *, char *); -static int -gotweb_render_age(struct template *tp, time_t time, int ref_tm) -{ - const struct got_error *err; - char *age; - int r; - - err = gotweb_get_time_str(&age, time, ref_tm); - if (err) - return 0; - r = tp->tp_puts(tp, age); - free(age); - return r; -} - !} {{ define gotweb_render_header(struct template *tp) }} @@ -221,7 +206,7 @@ gotweb_render_age(struct template *tp, time_t time, in {{ end }} {{ if srv->show_repo_age }}
- {{ repo_dir->age }} + {{ render gotweb_render_age(tp, repo_dir->age, TM_DIFF) }}
{{ end }}