| 160 | } |
| 161 | |
| 162 | static int |
| 163 | container_to_json(const struct rte_tel_data *d, char *out_buf, size_t buf_len) |
| 164 | { |
| 165 | size_t used = 0; |
| 166 | unsigned int i; |
| 167 | |
| 168 | if (d->type != TEL_DICT && d->type != TEL_ARRAY_UINT && |
| 169 | d->type != TEL_ARRAY_INT && d->type != TEL_ARRAY_STRING) |
| 170 | return snprintf(out_buf, buf_len, "null"); |
| 171 | |
| 172 | if (d->type == TEL_DICT) |
| 173 | used = rte_tel_json_empty_obj(out_buf, buf_len, 0); |
| 174 | else |
| 175 | used = rte_tel_json_empty_array(out_buf, buf_len, 0); |
| 176 | |
| 177 | if (d->type == TEL_ARRAY_UINT) |
| 178 | for (i = 0; i < d->data_len; i++) |
| 179 | used = rte_tel_json_add_array_uint(out_buf, |
| 180 | buf_len, used, |
| 181 | d->data.array[i].uval); |
| 182 | if (d->type == TEL_ARRAY_INT) |
| 183 | for (i = 0; i < d->data_len; i++) |
| 184 | used = rte_tel_json_add_array_int(out_buf, |
| 185 | buf_len, used, |
| 186 | d->data.array[i].ival); |
| 187 | if (d->type == TEL_ARRAY_STRING) |
| 188 | for (i = 0; i < d->data_len; i++) |
| 189 | used = rte_tel_json_add_array_string(out_buf, |
| 190 | buf_len, used, |
| 191 | d->data.array[i].sval); |
| 192 | if (d->type == TEL_DICT) |
| 193 | for (i = 0; i < d->data_len; i++) { |
| 194 | const struct tel_dict_entry *v = &d->data.dict[i]; |
| 195 | switch (v->type) { |
| 196 | case RTE_TEL_STRING_VAL: |
| 197 | used = rte_tel_json_add_obj_str(out_buf, |
| 198 | buf_len, used, |
| 199 | v->name, v->value.sval); |
| 200 | break; |
| 201 | case RTE_TEL_INT_VAL: |
| 202 | used = rte_tel_json_add_obj_int(out_buf, |
| 203 | buf_len, used, |
| 204 | v->name, v->value.ival); |
| 205 | break; |
| 206 | case RTE_TEL_UINT_VAL: |
| 207 | used = rte_tel_json_add_obj_uint(out_buf, |
| 208 | buf_len, used, |
| 209 | v->name, v->value.uval); |
| 210 | break; |
| 211 | case RTE_TEL_CONTAINER: |
| 212 | { |
| 213 | char *temp = malloc(buf_len); |
| 214 | if (temp == NULL) |
| 215 | break; |
| 216 | *temp = '\0'; /* ensure valid string */ |
| 217 | |
| 218 | const struct container *cont = |
| 219 | &v->value.container; |
no test coverage detected