Users may want to do a case-insensitive comparison of tokens. Add simple helpers for that. Signed-off-by: Ahmad Fatoum <a.fatoum@xxxxxxxxxxxxxx> --- include/jsmn.h | 3 +++ lib/jsmn.c | 12 ++++++++++++ 2 files changed, 15 insertions(+) diff --git a/include/jsmn.h b/include/jsmn.h index 62197c2593b4..64b3b535ab6e 100644 --- a/include/jsmn.h +++ b/include/jsmn.h @@ -101,6 +101,9 @@ JSMN_API bool jsmn_str_eq(const char *str, const char *json, const jsmntok_t *to /** Returns `true` if `token` is to `str`. */ JSMN_API bool jsmn_eq(const char *val, const char *json, const jsmntok_t *token); +/** Returns `true` if `token` is equal to `str`, ignoring case. */ +JSMN_API bool jsmn_strcase_eq(const char *str, const char *json, const jsmntok_t *token); + /** Returns the token after the value at `tokens[0]`. */ JSMN_API const jsmntok_t *jsmn_skip_value(const jsmntok_t *tokens); diff --git a/lib/jsmn.c b/lib/jsmn.c index 3d2ada7b7fdc..9e624f7518ad 100644 --- a/lib/jsmn.c +++ b/lib/jsmn.c @@ -418,6 +418,18 @@ JSMN_API bool jsmn_str_eq(const char *str, const char *json, const jsmntok_t *to return token->type == JSMN_STRING && jsmn_eq(str, json, token); } +static bool jsmn_case_eq(const char *val, const char *json, const jsmntok_t *token) +{ + size_t token_size = jsmn_token_size(token); + return strlen(val) == token_size + && strncasecmp(json + token->start, val, token_size) == 0; +} + +JSMN_API bool jsmn_strcase_eq(const char *str, const char *json, const jsmntok_t *token) +{ + return token->type == JSMN_STRING && jsmn_case_eq(str, json, token); +} + JSMN_API const jsmntok_t *jsmn_skip_value(const jsmntok_t *tokens) { int max_index = tokens[0].end; -- 2.39.2