| /* | |
| * Copyright 2017, Data61, CSIRO (ABN 41 687 119 230) | |
| * | |
| * SPDX-License-Identifier: BSD-2-Clause | |
| */ | |
| #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("""); | |
| break; | |
| case '\'': | |
| ret += PRINT("'"); | |
| break; | |
| case '<': | |
| ret += PRINT("<"); | |
| break; | |
| case '>': | |
| ret += PRINT(">"); | |
| break; | |
| case '&': | |
| ret += PRINT("&"); | |
| break; | |
| default: | |
| if (print == NULL) { | |
| putchar(*string); | |
| ret++; | |
| } else { | |
| ret += print(arg, "%c", *string); | |
| } | |
| } | |
| string++; | |
| } | |
| return ret; | |
| } |