Decode JSON string escapes with error offsets in C
C
#include <stddef.h>
#include <string.h>
int json_decode_string(const char *s, char *out, size_t cap, size_t *err) {
size_t n = 0;
if (*s != '"') { *err = 0; return -1; }
for (size_t i = 1; s[i]; i++) {
unsigned char c = (unsigned char)s[i];
if (c == '"') { out[n] = '\0'; return (int)i + 1; }
if (c == '\\') {
c = (unsigned char)s[++i];
if (c == 'n') c = '\n';
else if (c == 't') c = '\t';
else if (c != '"' && c != '\\' && c != '/') { *err = i; return -1; }
}
if (n + 1 >= cap) { *err = i; return -1; }
out[n++] = (char)c;
}
*err = strlen(s);
return -1;
}