wrap_in_html(): use strbuf_addstr_xml_quoted()
authorMichael Haggerty <mhagger@alum.mit.edu>
Sun, 25 Nov 2012 11:08:40 +0000 (12:08 +0100)
committerJunio C Hamano <gitster@pobox.com>
Thu, 29 Nov 2012 21:43:04 +0000 (13:43 -0800)
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>
imap-send.c

index a5e0e33c2d10ce2cbea10f27858af9e7229a5701..b73c913f4ec3256681f122fc94d524e6adebaa15 100644 (file)
@@ -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);