const char *str_escape(const char *str) { const char *p; string_t *ret; /* see if we need to quote it */ for (p = str; *p != '\0'; p++) { if (IS_ESCAPED_CHAR(*p)) break; } if (*p == '\0') return str; /* quote */ ret = t_str_new((size_t) (p - str) + 128); str_append_n(ret, str, (size_t) (p - str)); for (; *p != '\0'; p++) { if (IS_ESCAPED_CHAR(*p)) str_append_c(ret, '\\'); str_append_c(ret, *p); } return str_c(ret); }
char *ezcfg_util_javascript_var_escaped(const char *src) { int len; char *dst; char *p; if (src == NULL) { return NULL; } len = var_escaped_length(src); if (len < 1) { return NULL; } dst = malloc(len); if (dst == NULL) { return NULL; } p = dst; while(*src != '\0') { if (IS_ESCAPED_CHAR(*src)) { *p = '\\'; p++; } *p++ = *src++; } /* 0-terminated string */ *p = '\0'; return dst; }
static int var_escaped_length(const char *s) { int len; len = 0; while(*s != '\0') { if (IS_ESCAPED_CHAR(*s)) len++; s++; len++; } /* one more for '\0' */ len++; return len; }