return true;
}
-char *escape_double_quotes(const char *str) {
+char *escape_double_quotes_and_backslashes(const char *str) {
if (str == NULL) {
return NULL;
}
size_t escaped_length = strlen(str) + 1;
for (size_t i = 0; str[i] != '\0'; i++) {
- if (str[i] == '"') {
+ if (str[i] == '"' || str[i] == '\\') {
escaped_length++;
}
}
size_t pos = 0;
for (size_t i = 0; str[i] != '\0'; i++) {
- if (str[i] == '"') {
+ if (str[i] == '"' || str[i] == '\\') {
escaped[pos++] = '\\';
- escaped[pos++] = '"';
- } else {
- escaped[pos++] = str[i];
}
+ escaped[pos++] = str[i];
}
// no need to set zero due to calloc() being used prior
auto value_s = [&](const char *name, const char *val, bool end = false) {
start_value(name);
- char * val_escaped = escape_double_quotes(val);
+ char * val_escaped = escape_double_quotes_and_backslashes(val);
fout << "\"" << val_escaped << (end ? "\"\n" : "\",\n");
free(val_escaped);
};