On Tue, Apr 07, 2020 at 06:02:29PM +0200, Patrick Steinhardt wrote: > 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.
Missing SOB... > --- > 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 { Commit message says about jsmntok only. Here you add jsmn_parser too. If it is needed then it should go into separate patch. > 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; It seems to me that this belongs to separate patch. > } > 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; Something is messed up with tabs and spaces here... Daniel _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel