blob: 08037359cac65057d18dcab090e26917f579f979 [file] [log] [blame]
/*
* Copyright 2017, Data61
* Commonwealth Scientific and Industrial Research Organisation (CSIRO)
* ABN 41 687 119 230.
*
* This software may be distributed and modified according to the terms of
* the BSD 2-Clause license. Note that NO WARRANTY is provided.
* See "LICENSE_BSD2.txt" for details.
*
* @TAG(DATA61_BSD)
*/
#include <stddef.h>
#include <stdio.h>
#include <utils/attribute.h>
#include <utils/xml.h>
#define PRINT(s) (print == NULL ? printf("%s", (s)) : print(arg, "%s", (s)))
int
utils_put_xml_escape(const char *string,
int (*print)(void *arg, const char *format, ...) FORMAT(printf, 2, 3),
void *arg)
{
int ret = 0;
while (*string != '\0') {
switch (*string) {
case '"':
ret += PRINT("&quot;");
break;
case '\'':
ret += PRINT("&apos;");
break;
case '<':
ret += PRINT("&lt;");
break;
case '>':
ret += PRINT("&gt;");
break;
case '&':
ret += PRINT("&amp;");
break;
default:
if (print == NULL) {
putchar(*string);
ret++;
} else {
ret += print(arg, "%c", *string);
}
}
string++;
}
return ret;
}