grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 2/2] json: Update jsmn library to get rid of casts


From: Patrick Steinhardt
Subject: [PATCH 2/2] json: Update jsmn library to get rid of casts
Date: Tue, 7 Apr 2020 18:02:29 +0200

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

Attachment: signature.asc
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]