зеркало из https://github.com/microsoft/git.git
Add new function strbuf_add_xml_quoted()
Substantially the same code is present in http-push.c and imap-send.c, so make a library function out of it. Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
d1eded46fa
Коммит
5963c0367f
26
strbuf.c
26
strbuf.c
|
@ -428,6 +428,32 @@ void strbuf_add_lines(struct strbuf *out, const char *prefix,
|
|||
strbuf_complete_line(out);
|
||||
}
|
||||
|
||||
void strbuf_addstr_xml_quoted(struct strbuf *buf, const char *s)
|
||||
{
|
||||
while (*s) {
|
||||
size_t len = strcspn(s, "\"<>&");
|
||||
strbuf_add(buf, s, len);
|
||||
s += len;
|
||||
switch (*s) {
|
||||
case '"':
|
||||
strbuf_addstr(buf, """);
|
||||
break;
|
||||
case '<':
|
||||
strbuf_addstr(buf, "<");
|
||||
break;
|
||||
case '>':
|
||||
strbuf_addstr(buf, ">");
|
||||
break;
|
||||
case '&':
|
||||
strbuf_addstr(buf, "&");
|
||||
break;
|
||||
case 0:
|
||||
return;
|
||||
}
|
||||
s++;
|
||||
}
|
||||
}
|
||||
|
||||
static int is_rfc3986_reserved(char ch)
|
||||
{
|
||||
switch (ch) {
|
||||
|
|
6
strbuf.h
6
strbuf.h
|
@ -102,6 +102,12 @@ extern void strbuf_vaddf(struct strbuf *sb, const char *fmt, va_list ap);
|
|||
|
||||
extern void strbuf_add_lines(struct strbuf *sb, const char *prefix, const char *buf, size_t size);
|
||||
|
||||
/*
|
||||
* Append s to sb, with the characters '<', '>', '&' and '"' converted
|
||||
* into XML entities.
|
||||
*/
|
||||
extern void strbuf_addstr_xml_quoted(struct strbuf *sb, const char *s);
|
||||
|
||||
static inline void strbuf_complete_line(struct strbuf *sb)
|
||||
{
|
||||
if (sb->len && sb->buf[sb->len - 1] != '\n')
|
||||
|
|
Загрузка…
Ссылка в новой задаче