diff options
Diffstat (limited to 'src/util-strings.h')
-rw-r--r-- | src/util-strings.h | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/util-strings.h b/src/util-strings.h index 2a15fab3..d5a84146 100644 --- a/src/util-strings.h +++ b/src/util-strings.h @@ -43,6 +43,8 @@ #include <xlocale.h> #endif +#include "util-macros.h" + static inline bool streq(const char *str1, const char *str2) { @@ -398,3 +400,31 @@ safe_basename(const char *filename); char * trunkname(const char *filename); + +/** + * Return a copy of str with all % converted to %% to make the string + * acceptable as printf format. + */ +static inline char * +str_sanitize(const char *str) +{ + if (!str) + return NULL; + + if (!strchr(str, '%')) + return strdup(str); + + size_t slen = min(strlen(str), 512); + char *sanitized = zalloc(2 * slen + 1); + const char *src = str; + char *dst = sanitized; + + for (size_t i = 0; i < slen; i++) { + if (*src == '%') + *dst++ = '%'; + *dst++ = *src++; + } + *dst = '\0'; + + return sanitized; +} |