in lib/parson.c [225:258]
static void remove_comments(char *string, const char *start_token, const char *end_token) {
parson_bool_t in_string = PARSON_FALSE, escaped = PARSON_FALSE;
size_t i;
char *ptr = NULL, current_char;
size_t start_token_len = strlen(start_token);
size_t end_token_len = strlen(end_token);
if (start_token_len == 0 || end_token_len == 0) {
return;
}
while ((current_char = *string) != '\0') {
if (current_char == '\\' && !escaped) {
escaped = PARSON_TRUE;
string++;
continue;
} else if (current_char == '\"' && !escaped) {
in_string = !in_string;
} else if (!in_string && strncmp(string, start_token, start_token_len) == 0) {
for(i = 0; i < start_token_len; i++) {
string[i] = ' ';
}
string = string + start_token_len;
ptr = strstr(string, end_token);
if (!ptr) {
return;
}
for (i = 0; i < (ptr - string) + end_token_len; i++) {
string[i] = ' ';
}
string = ptr + end_token_len - 1;
}
escaped = PARSON_FALSE;
string++;
}
}