Update our embedded version of the jsmn library to upstream commit 053d3cd (Merge pull request #175 from pks-t/pks/struct-type, 2020-04-02). The update adds a name for the `jsmntok` struct, which allows us to add a forward declaration for the struct's typedef. As a result, we can now convert the `void *` tokens member of `struct grub_json` to `jsmntok_t *` and remove all casts. --- grub-core/lib/json/jsmn.h | 7 +++++-- grub-core/lib/json/json.c | 8 ++++---- grub-core/lib/json/json.h | 4 +++- 3 files changed, 12 insertions(+), 7 deletions(-)
diff --git a/grub-core/lib/json/jsmn.h b/grub-core/lib/json/jsmn.h index b95368a20..3178dcc97 100644 --- a/grub-core/lib/json/jsmn.h +++ b/grub-core/lib/json/jsmn.h @@ -66,7 +66,7 @@ enum jsmnerr { * start start position in JSON data string * end end position in JSON data string */ -typedef struct { +typedef struct jsmntok { jsmntype_t type; int start; int end; @@ -80,7 +80,7 @@ typedef struct { * JSON parser. Contains an array of token blocks available. Also stores * the string being parsed now and current position in that string. */ -typedef struct { +typedef struct jsmn_parser { unsigned int pos; /* offset in the JSON string */ unsigned int toknext; /* next token to allocate */ int toksuper; /* superior token node, e.g. parent object or array */ @@ -154,6 +154,9 @@ static int jsmn_parse_primitive(jsmn_parser *parser, const char *js, case ']': case '}': goto found; + default: + /* to quiet a warning from gcc*/ + break; } if (js[parser->pos] < 32 || js[parser->pos] >= 127) { parser->pos = start; diff --git a/grub-core/lib/json/json.c b/grub-core/lib/json/json.c index 15c0d9949..694af4f3a 100644 --- a/grub-core/lib/json/json.c +++ b/grub-core/lib/json/json.c @@ -95,7 +95,7 @@ grub_json_getsize (grub_size_t *out, const grub_json_t *json) { int size; - size = ((jsmntok_t *)json->tokens)[json->idx].size; + size = json->tokens[json->idx].size; if (size < 0) return GRUB_ERR_OUT_OF_RANGE; @@ -106,7 +106,7 @@ grub_json_getsize (grub_size_t *out, const grub_json_t *json) grub_err_t grub_json_gettype (grub_json_type_t *out, const grub_json_t *json) { - switch (((jsmntok_t *)json->tokens)[json->idx].type) + switch (json->tokens[json->idx].type) { case JSMN_OBJECT: *out = GRUB_JSON_OBJECT; @@ -142,7 +142,7 @@ grub_json_getchild (grub_json_t *out, const grub_json_t *parent, grub_size_t n) * array), as well. We thus add the children's size to n on * each iteration. */ - p = &((jsmntok_t *)parent->tokens)[parent->idx]; + p = &parent->tokens[parent->idx]; while (n--) n += p[offset++].size; @@ -197,7 +197,7 @@ get_value (grub_json_type_t *out_type, const char **out_string, const grub_json_ p = &child; } - tok = &((jsmntok_t *) p->tokens)[p->idx]; + tok = &p->tokens[p->idx]; p->string[tok->end] = '\0'; *out_string = p->string + tok->start; diff --git a/grub-core/lib/json/json.h b/grub-core/lib/json/json.h index 358e4bca3..d9f99454d 100644 --- a/grub-core/lib/json/json.h +++ b/grub-core/lib/json/json.h @@ -36,9 +36,11 @@ enum grub_json_type }; typedef enum grub_json_type grub_json_type_t; +typedef struct jsmntok jsmntok_t; + struct grub_json { - void *tokens; + jsmntok_t *tokens; char *string; grub_size_t idx; }; -- 2.26.0
signature.asc
Description: PGP signature
_______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel