Diffstat (limited to 'html.c')
| -rw-r--r-- | html.c | 32 |
1 files changed, 21 insertions, 11 deletions
@@ -124,20 +124,29 @@ void html_vtxtf(const char *format, va_list ap) void html_txt(const char *txt) { - if (txt) - html_ntxt(txt, strlen(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); } -ssize_t html_ntxt(const char *txt, size_t len) +void html_ntxt(int len, const char *txt) { const char *t = txt; - ssize_t slen; - - if (len > SSIZE_MAX) - return -1; - - slen = (ssize_t) len; - while (t && *t && slen--) { + while (t && *t && len--) { int c = *t; if (c == '<' || c == '>' || c == '&') { html_raw(txt, t - txt); @@ -153,7 +162,8 @@ ssize_t html_ntxt(const char *txt, size_t len) } if (t != txt) html_raw(txt, t - txt); - return slen; + if (len < 0) + html("..."); } void html_attrf(const char *fmt, ...) |