wrap_in_html(): use strbuf_addstr_xml_quoted()

Use the new function to quote characters as they are being added to
buf, rather than quoting them in *p and then copying them into buf.
This increases code sharing, and changes the algorithm from O(N^2) to
O(N) in the number of characters in a line.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Michael Haggerty 2012-11-25 12:08:40 +01:00 коммит произвёл Junio C Hamano
Родитель f035ab6205
Коммит 3c64063558
1 изменённых файлов: 4 добавлений и 19 удалений

Просмотреть файл

@ -1339,21 +1339,6 @@ static int imap_store_msg(struct store *gctx, struct msg_data *msg)
return DRV_OK;
}
static void encode_html_chars(struct strbuf *p)
{
int i;
for (i = 0; i < p->len; i++) {
if (p->buf[i] == '&')
strbuf_splice(p, i, 1, "&amp;", 5);
if (p->buf[i] == '<')
strbuf_splice(p, i, 1, "&lt;", 4);
if (p->buf[i] == '>')
strbuf_splice(p, i, 1, "&gt;", 4);
if (p->buf[i] == '"')
strbuf_splice(p, i, 1, "&quot;", 6);
}
}
static void wrap_in_html(struct strbuf *msg)
{
struct strbuf buf = STRBUF_INIT;
@ -1372,12 +1357,12 @@ static void wrap_in_html(struct strbuf *msg)
strbuf_addbuf(&buf, *p);
strbuf_addstr(&buf, pre_open);
added_header = 1;
continue;
} else {
strbuf_addbuf(&buf, *p);
}
} else {
strbuf_addstr_xml_quoted(&buf, (*p)->buf);
}
else
encode_html_chars(*p);
strbuf_addbuf(&buf, *p);
}
strbuf_addstr(&buf, pre_close);
strbuf_list_free(lines);