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 <leandro.pereira@intel.com>
This commit is contained in:
parent
d66069d051
commit
3384262827
2 changed files with 45 additions and 31 deletions
|
@ -441,12 +441,12 @@ static int decode_value(struct json_obj *obj,
|
||||||
|
|
||||||
switch (descr->type) {
|
switch (descr->type) {
|
||||||
case JSON_TOK_OBJECT_START:
|
case JSON_TOK_OBJECT_START:
|
||||||
return obj_parse(obj, descr->sub_descr,
|
return obj_parse(obj, descr->object.sub_descr,
|
||||||
descr->sub_descr_len,
|
descr->object.sub_descr_len,
|
||||||
field);
|
field);
|
||||||
case JSON_TOK_LIST_START:
|
case JSON_TOK_LIST_START:
|
||||||
return arr_parse(obj, descr->element_descr,
|
return arr_parse(obj, descr->array.element_descr,
|
||||||
descr->n_elements, field, val);
|
descr->array.n_elements, field, val);
|
||||||
case JSON_TOK_FALSE:
|
case JSON_TOK_FALSE:
|
||||||
case JSON_TOK_TRUE: {
|
case JSON_TOK_TRUE: {
|
||||||
bool *v = field;
|
bool *v = field;
|
||||||
|
@ -484,13 +484,13 @@ static ptrdiff_t get_elem_size(const struct json_obj_descr *descr)
|
||||||
case JSON_TOK_FALSE:
|
case JSON_TOK_FALSE:
|
||||||
return sizeof(bool);
|
return sizeof(bool);
|
||||||
case JSON_TOK_LIST_START:
|
case JSON_TOK_LIST_START:
|
||||||
return descr->n_elements * get_elem_size(descr->element_descr);
|
return descr->array.n_elements * get_elem_size(descr->array.element_descr);
|
||||||
case JSON_TOK_OBJECT_START: {
|
case JSON_TOK_OBJECT_START: {
|
||||||
ptrdiff_t total = 0;
|
ptrdiff_t total = 0;
|
||||||
size_t i;
|
size_t i;
|
||||||
|
|
||||||
for (i = 0; i < descr->sub_descr_len; i++) {
|
for (i = 0; i < descr->sub_descr_len; i++) {
|
||||||
total += get_elem_size(&descr->sub_descr[i]);
|
total += get_elem_size(&descr->object.sub_descr[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return total;
|
return total;
|
||||||
|
@ -809,11 +809,11 @@ static int encode(const struct json_obj_descr *descr, const void *val,
|
||||||
case JSON_TOK_STRING:
|
case JSON_TOK_STRING:
|
||||||
return str_encode(ptr, append_bytes, data);
|
return str_encode(ptr, append_bytes, data);
|
||||||
case JSON_TOK_LIST_START:
|
case JSON_TOK_LIST_START:
|
||||||
return arr_encode(descr->element_descr, ptr,
|
return arr_encode(descr->array.element_descr, ptr,
|
||||||
val, append_bytes, data);
|
val, append_bytes, data);
|
||||||
case JSON_TOK_OBJECT_START:
|
case JSON_TOK_OBJECT_START:
|
||||||
return json_obj_encode(descr->sub_descr,
|
return json_obj_encode(descr->object.sub_descr,
|
||||||
descr->sub_descr_len,
|
descr->object.sub_descr_len,
|
||||||
ptr, append_bytes, data);
|
ptr, append_bytes, data);
|
||||||
case JSON_TOK_NUMBER:
|
case JSON_TOK_NUMBER:
|
||||||
return num_encode(ptr, append_bytes, data);
|
return num_encode(ptr, append_bytes, data);
|
||||||
|
|
|
@ -44,11 +44,11 @@ struct json_obj_descr {
|
||||||
struct {
|
struct {
|
||||||
const struct json_obj_descr *sub_descr;
|
const struct json_obj_descr *sub_descr;
|
||||||
size_t sub_descr_len;
|
size_t sub_descr_len;
|
||||||
};
|
} object;
|
||||||
struct {
|
struct {
|
||||||
const struct json_obj_descr *element_descr;
|
const struct json_obj_descr *element_descr;
|
||||||
size_t n_elements;
|
size_t n_elements;
|
||||||
};
|
} array;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -129,8 +129,10 @@ typedef int (*json_append_bytes_t)(const char *bytes, size_t len,
|
||||||
.field_name_len = (sizeof(#field_name_) - 1), \
|
.field_name_len = (sizeof(#field_name_) - 1), \
|
||||||
.offset = offsetof(struct_, field_name_), \
|
.offset = offsetof(struct_, field_name_), \
|
||||||
.type = JSON_TOK_OBJECT_START, \
|
.type = JSON_TOK_OBJECT_START, \
|
||||||
.sub_descr = sub_descr_, \
|
.object = { \
|
||||||
.sub_descr_len = ARRAY_SIZE(sub_descr_) \
|
.sub_descr = sub_descr_, \
|
||||||
|
.sub_descr_len = ARRAY_SIZE(sub_descr_), \
|
||||||
|
}, \
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -165,11 +167,13 @@ typedef int (*json_append_bytes_t)(const char *bytes, size_t len,
|
||||||
.field_name_len = sizeof(#field_name_) - 1, \
|
.field_name_len = sizeof(#field_name_) - 1, \
|
||||||
.offset = offsetof(struct_, field_name_), \
|
.offset = offsetof(struct_, field_name_), \
|
||||||
.type = JSON_TOK_LIST_START, \
|
.type = JSON_TOK_LIST_START, \
|
||||||
.element_descr = &(struct json_obj_descr) { \
|
.array = { \
|
||||||
.type = elem_type_, \
|
.element_descr = &(struct json_obj_descr) { \
|
||||||
.offset = offsetof(struct_, len_field_), \
|
.type = elem_type_, \
|
||||||
|
.offset = offsetof(struct_, len_field_), \
|
||||||
|
}, \
|
||||||
|
.n_elements = (max_len_), \
|
||||||
}, \
|
}, \
|
||||||
.n_elements = (max_len_), \
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -218,13 +222,17 @@ typedef int (*json_append_bytes_t)(const char *bytes, size_t len,
|
||||||
.field_name_len = sizeof(#field_name_) - 1, \
|
.field_name_len = sizeof(#field_name_) - 1, \
|
||||||
.offset = offsetof(struct_, field_name_), \
|
.offset = offsetof(struct_, field_name_), \
|
||||||
.type = JSON_TOK_LIST_START, \
|
.type = JSON_TOK_LIST_START, \
|
||||||
.element_descr = &(struct json_obj_descr) { \
|
.array = { \
|
||||||
.type = JSON_TOK_OBJECT_START, \
|
.element_descr = &(struct json_obj_descr) { \
|
||||||
.sub_descr = elem_descr_, \
|
.type = JSON_TOK_OBJECT_START, \
|
||||||
.sub_descr_len = elem_descr_len_, \
|
.object = { \
|
||||||
.offset = offsetof(struct_, len_field_), \
|
.sub_descr = elem_descr_, \
|
||||||
|
.sub_descr_len = elem_descr_len_, \
|
||||||
|
}, \
|
||||||
|
.offset = offsetof(struct_, len_field_), \
|
||||||
|
}, \
|
||||||
|
.n_elements = (max_len_), \
|
||||||
}, \
|
}, \
|
||||||
.n_elements = (max_len_), \
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -276,8 +284,10 @@ typedef int (*json_append_bytes_t)(const char *bytes, size_t len,
|
||||||
.field_name_len = (sizeof(json_field_name_) - 1), \
|
.field_name_len = (sizeof(json_field_name_) - 1), \
|
||||||
.offset = offsetof(struct_, struct_field_name_), \
|
.offset = offsetof(struct_, struct_field_name_), \
|
||||||
.type = JSON_TOK_OBJECT_START, \
|
.type = JSON_TOK_OBJECT_START, \
|
||||||
.sub_descr = sub_descr_, \
|
.object = { \
|
||||||
.sub_descr_len = ARRAY_SIZE(sub_descr_) \
|
.sub_descr = sub_descr_, \
|
||||||
|
.sub_descr_len = ARRAY_SIZE(sub_descr_), \
|
||||||
|
}, \
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -309,11 +319,13 @@ typedef int (*json_append_bytes_t)(const char *bytes, size_t len,
|
||||||
.field_name_len = sizeof(json_field_name_) - 1, \
|
.field_name_len = sizeof(json_field_name_) - 1, \
|
||||||
.offset = offsetof(struct_, struct_field_name_), \
|
.offset = offsetof(struct_, struct_field_name_), \
|
||||||
.type = JSON_TOK_LIST_START, \
|
.type = JSON_TOK_LIST_START, \
|
||||||
.element_descr = &(struct json_obj_descr) { \
|
.array = { \
|
||||||
.type = elem_type_, \
|
.element_descr = &(struct json_obj_descr) { \
|
||||||
.offset = offsetof(struct_, len_field_), \
|
.type = elem_type_, \
|
||||||
|
.offset = offsetof(struct_, len_field_), \
|
||||||
|
}, \
|
||||||
|
.n_elements = (max_len_), \
|
||||||
}, \
|
}, \
|
||||||
.n_elements = (max_len_), \
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -373,8 +385,10 @@ typedef int (*json_append_bytes_t)(const char *bytes, size_t len,
|
||||||
.type = JSON_TOK_LIST_START, \
|
.type = JSON_TOK_LIST_START, \
|
||||||
.element_descr = &(struct json_obj_descr) { \
|
.element_descr = &(struct json_obj_descr) { \
|
||||||
.type = JSON_TOK_OBJECT_START, \
|
.type = JSON_TOK_OBJECT_START, \
|
||||||
.sub_descr = elem_descr_, \
|
.object = { \
|
||||||
.sub_descr_len = elem_descr_len_, \
|
.sub_descr = elem_descr_, \
|
||||||
|
.sub_descr_len = elem_descr_len_, \
|
||||||
|
}, \
|
||||||
.offset = offsetof(struct_, len_field_), \
|
.offset = offsetof(struct_, len_field_), \
|
||||||
}, \
|
}, \
|
||||||
.n_elements = (max_len_), \
|
.n_elements = (max_len_), \
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue