зеркало из 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);
|
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)
|
static int is_rfc3986_reserved(char ch)
|
||||||
{
|
{
|
||||||
switch (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);
|
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)
|
static inline void strbuf_complete_line(struct strbuf *sb)
|
||||||
{
|
{
|
||||||
if (sb->len && sb->buf[sb->len - 1] != '\n')
|
if (sb->len && sb->buf[sb->len - 1] != '\n')
|
||||||
|
|
Загрузка…
Ссылка в новой задаче