diff --git a/utils.c b/utils.c index 5382d53..f6552db 100644 --- a/utils.c +++ b/utils.c @@ -206,6 +206,26 @@ modifyString(char * string, const char * before, const char * after) return string; } +char * +unescape_tag(const char *tag, int force_alloc) +{ + char *esc_tag = NULL; + + if( strstr(tag, "&") || strstr(tag, "<") || strstr(tag, ">") + || strstr(tag, """) ) + { + esc_tag = strdup(tag); + esc_tag = modifyString(esc_tag, "&", "&"); + esc_tag = modifyString(esc_tag, "<", "<"); + esc_tag = modifyString(esc_tag, ">", ">"); + esc_tag = modifyString(esc_tag, """, "\""); + } + else if( force_alloc ) + esc_tag = strdup(tag); + + return esc_tag; +} + char * escape_tag(const char *tag, int force_alloc) { diff --git a/utils.h b/utils.h index d9d49a4..a3088bb 100644 --- a/utils.h +++ b/utils.h @@ -36,6 +36,7 @@ char *strstrc(const char *s, const char *p, const char t); char *strcasestrc(const char *s, const char *p, const char t); char *modifyString(char * string, const char * before, const char * after); char *escape_tag(const char *tag, int force_alloc); +char *unescape_tag(const char *tag, int force_alloc); void strip_ext(char * name); /* Metadata functions */