Skip to content

Commit 3384262

Browse files
lpereiraAnas Nashif
authored andcommitted
lib: json: Fix compilation warnings
This appears to be a bug in GCC: when an anonymous union contains anonymous structs, GCC issues a warning that a field in one of the anonymous structs has not been initialized. Fix by making the structs not anonymous. Signed-off-by: Leandro Pereira <[email protected]>
1 parent d66069d commit 3384262

File tree

2 files changed

+45
-31
lines changed

2 files changed

+45
-31
lines changed

lib/json/json.c

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -441,12 +441,12 @@ static int decode_value(struct json_obj *obj,
441441

442442
switch (descr->type) {
443443
case JSON_TOK_OBJECT_START:
444-
return obj_parse(obj, descr->sub_descr,
445-
descr->sub_descr_len,
444+
return obj_parse(obj, descr->object.sub_descr,
445+
descr->object.sub_descr_len,
446446
field);
447447
case JSON_TOK_LIST_START:
448-
return arr_parse(obj, descr->element_descr,
449-
descr->n_elements, field, val);
448+
return arr_parse(obj, descr->array.element_descr,
449+
descr->array.n_elements, field, val);
450450
case JSON_TOK_FALSE:
451451
case JSON_TOK_TRUE: {
452452
bool *v = field;
@@ -484,13 +484,13 @@ static ptrdiff_t get_elem_size(const struct json_obj_descr *descr)
484484
case JSON_TOK_FALSE:
485485
return sizeof(bool);
486486
case JSON_TOK_LIST_START:
487-
return descr->n_elements * get_elem_size(descr->element_descr);
487+
return descr->array.n_elements * get_elem_size(descr->array.element_descr);
488488
case JSON_TOK_OBJECT_START: {
489489
ptrdiff_t total = 0;
490490
size_t i;
491491

492492
for (i = 0; i < descr->sub_descr_len; i++) {
493-
total += get_elem_size(&descr->sub_descr[i]);
493+
total += get_elem_size(&descr->object.sub_descr[i]);
494494
}
495495

496496
return total;
@@ -809,11 +809,11 @@ static int encode(const struct json_obj_descr *descr, const void *val,
809809
case JSON_TOK_STRING:
810810
return str_encode(ptr, append_bytes, data);
811811
case JSON_TOK_LIST_START:
812-
return arr_encode(descr->element_descr, ptr,
812+
return arr_encode(descr->array.element_descr, ptr,
813813
val, append_bytes, data);
814814
case JSON_TOK_OBJECT_START:
815-
return json_obj_encode(descr->sub_descr,
816-
descr->sub_descr_len,
815+
return json_obj_encode(descr->object.sub_descr,
816+
descr->object.sub_descr_len,
817817
ptr, append_bytes, data);
818818
case JSON_TOK_NUMBER:
819819
return num_encode(ptr, append_bytes, data);

lib/json/json.h

Lines changed: 36 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,11 @@ struct json_obj_descr {
4444
struct {
4545
const struct json_obj_descr *sub_descr;
4646
size_t sub_descr_len;
47-
};
47+
} object;
4848
struct {
4949
const struct json_obj_descr *element_descr;
5050
size_t n_elements;
51-
};
51+
} array;
5252
};
5353
};
5454

@@ -129,8 +129,10 @@ typedef int (*json_append_bytes_t)(const char *bytes, size_t len,
129129
.field_name_len = (sizeof(#field_name_) - 1), \
130130
.offset = offsetof(struct_, field_name_), \
131131
.type = JSON_TOK_OBJECT_START, \
132-
.sub_descr = sub_descr_, \
133-
.sub_descr_len = ARRAY_SIZE(sub_descr_) \
132+
.object = { \
133+
.sub_descr = sub_descr_, \
134+
.sub_descr_len = ARRAY_SIZE(sub_descr_), \
135+
}, \
134136
}
135137

136138
/**
@@ -165,11 +167,13 @@ typedef int (*json_append_bytes_t)(const char *bytes, size_t len,
165167
.field_name_len = sizeof(#field_name_) - 1, \
166168
.offset = offsetof(struct_, field_name_), \
167169
.type = JSON_TOK_LIST_START, \
168-
.element_descr = &(struct json_obj_descr) { \
169-
.type = elem_type_, \
170-
.offset = offsetof(struct_, len_field_), \
170+
.array = { \
171+
.element_descr = &(struct json_obj_descr) { \
172+
.type = elem_type_, \
173+
.offset = offsetof(struct_, len_field_), \
174+
}, \
175+
.n_elements = (max_len_), \
171176
}, \
172-
.n_elements = (max_len_), \
173177
}
174178

175179
/**
@@ -218,13 +222,17 @@ typedef int (*json_append_bytes_t)(const char *bytes, size_t len,
218222
.field_name_len = sizeof(#field_name_) - 1, \
219223
.offset = offsetof(struct_, field_name_), \
220224
.type = JSON_TOK_LIST_START, \
221-
.element_descr = &(struct json_obj_descr) { \
222-
.type = JSON_TOK_OBJECT_START, \
223-
.sub_descr = elem_descr_, \
224-
.sub_descr_len = elem_descr_len_, \
225-
.offset = offsetof(struct_, len_field_), \
225+
.array = { \
226+
.element_descr = &(struct json_obj_descr) { \
227+
.type = JSON_TOK_OBJECT_START, \
228+
.object = { \
229+
.sub_descr = elem_descr_, \
230+
.sub_descr_len = elem_descr_len_, \
231+
}, \
232+
.offset = offsetof(struct_, len_field_), \
233+
}, \
234+
.n_elements = (max_len_), \
226235
}, \
227-
.n_elements = (max_len_), \
228236
}
229237

230238
/**
@@ -276,8 +284,10 @@ typedef int (*json_append_bytes_t)(const char *bytes, size_t len,
276284
.field_name_len = (sizeof(json_field_name_) - 1), \
277285
.offset = offsetof(struct_, struct_field_name_), \
278286
.type = JSON_TOK_OBJECT_START, \
279-
.sub_descr = sub_descr_, \
280-
.sub_descr_len = ARRAY_SIZE(sub_descr_) \
287+
.object = { \
288+
.sub_descr = sub_descr_, \
289+
.sub_descr_len = ARRAY_SIZE(sub_descr_), \
290+
}, \
281291
}
282292

283293
/**
@@ -309,11 +319,13 @@ typedef int (*json_append_bytes_t)(const char *bytes, size_t len,
309319
.field_name_len = sizeof(json_field_name_) - 1, \
310320
.offset = offsetof(struct_, struct_field_name_), \
311321
.type = JSON_TOK_LIST_START, \
312-
.element_descr = &(struct json_obj_descr) { \
313-
.type = elem_type_, \
314-
.offset = offsetof(struct_, len_field_), \
322+
.array = { \
323+
.element_descr = &(struct json_obj_descr) { \
324+
.type = elem_type_, \
325+
.offset = offsetof(struct_, len_field_), \
326+
}, \
327+
.n_elements = (max_len_), \
315328
}, \
316-
.n_elements = (max_len_), \
317329
}
318330

319331
/**
@@ -373,8 +385,10 @@ typedef int (*json_append_bytes_t)(const char *bytes, size_t len,
373385
.type = JSON_TOK_LIST_START, \
374386
.element_descr = &(struct json_obj_descr) { \
375387
.type = JSON_TOK_OBJECT_START, \
376-
.sub_descr = elem_descr_, \
377-
.sub_descr_len = elem_descr_len_, \
388+
.object = { \
389+
.sub_descr = elem_descr_, \
390+
.sub_descr_len = elem_descr_len_, \
391+
}, \
378392
.offset = offsetof(struct_, len_field_), \
379393
}, \
380394
.n_elements = (max_len_), \

0 commit comments

Comments
 (0)