X-Git-Url: https://gitweb.ps.run/ps-cgit/blobdiff_plain/a2c6355f9fdede78ce46aeee39ef649637aaadf9..084ca50972b4be120eba8d22ce585766ae315c36:/html.c?ds=sidebyside diff --git a/html.c b/html.c index 337baeb..6f31097 100644 --- a/html.c +++ b/html.c @@ -95,7 +95,7 @@ void html_txt(const char *txt) while(t && *t){ int c = *t; if (c=='<' || c=='>' || c=='&') { - write(htmlfd, txt, t - txt); + html_raw(txt, t - txt); if (c=='>') html(">"); else if (c=='<') @@ -116,7 +116,7 @@ void html_ntxt(int len, const char *txt) while(t && *t && len--){ int c = *t; if (c=='<' || c=='>' || c=='&') { - write(htmlfd, txt, t - txt); + html_raw(txt, t - txt); if (c=='>') html(">"); else if (c=='<') @@ -128,7 +128,7 @@ void html_ntxt(int len, const char *txt) t++; } if (t!=txt) - write(htmlfd, txt, t - txt); + html_raw(txt, t - txt); if (len<0) html("..."); } @@ -139,7 +139,7 @@ void html_attr(const char *txt) while(t && *t){ int c = *t; if (c=='<' || c=='>' || c=='\'' || c=='\"') { - write(htmlfd, txt, t - txt); + html_raw(txt, t - txt); if (c=='>') html(">"); else if (c=='<') @@ -162,9 +162,9 @@ void html_url_path(const char *txt) while(t && *t){ int c = *t; const char *e = url_escape_table[c]; - if (e && c!='+' && c!='&' && c!='+') { - write(htmlfd, txt, t - txt); - write(htmlfd, e, 3); + if (e && c!='+' && c!='&') { + html_raw(txt, t - txt); + html(e); txt = t+1; } t++; @@ -179,9 +179,11 @@ void html_url_arg(const char *txt) while(t && *t){ int c = *t; const char *e = url_escape_table[c]; + if (c == ' ') + e = "+"; if (e) { - write(htmlfd, txt, t - txt); - write(htmlfd, e, 3); + html_raw(txt, t - txt); + html(e); txt = t+1; } t++; @@ -249,7 +251,7 @@ int html_include(const char *filename) return -1; } while((len = fread(buf, 1, 4096, f)) > 0) - write(htmlfd, buf, len); + html_raw(buf, len); fclose(f); return 0; } @@ -268,19 +270,20 @@ int hextoint(char c) char *convert_query_hexchar(char *txt) { - int d1, d2; - if (strlen(txt) < 3) { + int d1, d2, n; + n = strlen(txt); + if (n < 3) { *txt = '\0'; return txt-1; } d1 = hextoint(*(txt+1)); d2 = hextoint(*(txt+2)); if (d1<0 || d2<0) { - strcpy(txt, txt+3); + memmove(txt, txt+3, n-2); return txt-1; } else { *txt = d1 * 16 + d2; - strcpy(txt+1, txt+3); + memmove(txt+1, txt+3, n-2); return txt; } }