diff options
author | Jeff Smith <whydoubt@gmail.com> | 2017-10-01 23:39:05 -0500 |
---|---|---|
committer | John Keeping <john@keeping.me.uk> | 2017-10-03 19:19:34 +0100 |
commit | 70787254b270b1505aa8427813f64131be5df86c (patch) | |
tree | 5a6d23b8186d4d9d7e2bd5b84d3c3d092edd4e30 /html.c | |
parent | cache: flush stdio before restoring FDs (diff) | |
download | cgit-pink-70787254b270b1505aa8427813f64131be5df86c.tar.gz cgit-pink-70787254b270b1505aa8427813f64131be5df86c.zip |
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 (limited to 'html.c')
-rw-r--r-- | html.c | 32 |
1 files changed, 11 insertions, 21 deletions
diff --git a/html.c b/html.c index e7e6e07..7f81965 100644 --- 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(">"); - else if (c == '<') - html("<"); - else if (c == '&') - html("&"); - 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, ...) |