#define _POSIX_C_SOURCE 200809L #include "utils.h" #include #include #include #include char *sanitize(const char *s) { struct dynstr d; dynstr_init(&d); while (*s) { char ss[sizeof "\"\""] = {0}; switch (*s) { case '\'': strcpy(ss, "\'\'"); break; case '\"': strcpy(ss, "\"\""); break; default: *ss = *s; break; } if (dynstr_append(&d, "%s", ss)) { fprintf(stderr, "%s: dynstr_append failed\n", __func__); goto failure; } s++; } if (!d.str && dynstr_append(&d, "%c", '\0')) { fprintf(stderr, "%s: dynstr_append failed\n", __func__); goto failure; } return d.str; failure: dynstr_free(&d); return NULL; }