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;
}