neocgit

a more 'modern' version of cgit
Log | Files | Refs | Submodules | README | LICENSE | git clone https://git.ne02ptzero.me/git/neocgit

commit 70787254b270b1505aa8427813f64131be5df86c
parent 3b485cc5422f800d142c7023295e82c0a1c10b19
Author: Jeff Smith <whydoubt@gmail.com>
Date:   Sun,  1 Oct 2017 23:39:05 -0500

html: html_ntxt with no ellipsis

For implementing a ui-blame page, there is need for a function that
outputs a selection from a block of text, transformed for HTML output,
but with no further modifications or additions.

Signed-off-by: Jeff Smith <whydoubt@gmail.com>
Reviewed-by: John Keeping <john@keeping.me.uk>

Diffstat:
Mhtml.c | 32+++++++++++---------------------
Mhtml.h | 2+-
Mui-repolist.c | 3++-
3 files changed, 14 insertions(+), 23 deletions(-)

diff --git a/html.c b/html.c @@ -124,29 +124,20 @@ void html_vtxtf(const char *format, va_list ap) void html_txt(const char *txt) { - const char *t = txt; - while (t && *t) { - int c = *t; - if (c == '<' || c == '>' || c == '&') { - html_raw(txt, t - txt); - if (c == '>') - html("&gt;"); - else if (c == '<') - html("&lt;"); - else if (c == '&') - html("&amp;"); - txt = t + 1; - } - t++; - } - if (t != txt) - html(txt); + if (txt) + html_ntxt(txt, strlen(txt)); } -void html_ntxt(int len, const char *txt) +ssize_t html_ntxt(const char *txt, size_t len) { const char *t = txt; - while (t && *t && len--) { + ssize_t slen; + + if (len > SSIZE_MAX) + return -1; + + slen = (ssize_t) len; + while (t && *t && slen--) { int c = *t; if (c == '<' || c == '>' || c == '&') { html_raw(txt, t - txt); @@ -162,8 +153,7 @@ void html_ntxt(int len, const char *txt) } if (t != txt) html_raw(txt, t - txt); - if (len < 0) - html("..."); + return slen; } void html_attrf(const char *fmt, ...) diff --git a/html.h b/html.h @@ -19,7 +19,7 @@ __attribute__((format (printf,1,2))) extern void html_attrf(const char *format,...); extern void html_txt(const char *txt); -extern void html_ntxt(int len, const char *txt); +extern ssize_t html_ntxt(const char *txt, size_t len); extern void html_attr(const char *txt); extern void html_url_path(const char *txt); extern void html_url_arg(const char *txt); diff --git a/ui-repolist.c b/ui-repolist.c @@ -329,7 +329,8 @@ void cgit_print_repolist(void) repourl = cgit_repourl(ctx.repo->url); html_link_open(repourl, NULL, NULL); free(repourl); - html_ntxt(ctx.cfg.max_repodesc_len, ctx.repo->desc); + if (html_ntxt(ctx.repo->desc, ctx.cfg.max_repodesc_len) < 0) + html("..."); html_link_close(); html("</td><td>"); if (ctx.cfg.enable_index_owner) {