spa: add spa_json_begin

That combines spa_json_init() and spa_json_next, a common thing to do.
This commit is contained in:
Wim Taymans 2024-09-13 09:22:27 +02:00
parent 08057e0328
commit feccb882b6
7 changed files with 15 additions and 18 deletions

View file

@ -1122,8 +1122,7 @@ static int parse_value(const char *str, struct param_info *info)
const char *val; const char *val;
int len; int len;
spa_json_init(&it[0], str, strlen(str)); if ((len = spa_json_begin(&it[0], str, strlen(str), &val)) <= 0)
if ((len = spa_json_next(&it[0], &val)) <= 0)
return -EINVAL; return -EINVAL;
if (spa_json_is_array(val, len)) { if (spa_json_is_array(val, len)) {

View file

@ -139,8 +139,7 @@ static inline int spa_json_to_pod(struct spa_pod_builder *b, uint32_t flags,
struct spa_json iter; struct spa_json iter;
const char *val; const char *val;
spa_json_init(&iter, value, len); if ((len = spa_json_begin(&iter, value, len, &val)) <= 0)
if ((len = spa_json_next(&iter, &val)) <= 0)
return -EINVAL; return -EINVAL;
return spa_json_to_pod_part(b, flags, info->type, info, &iter, val, len); return spa_json_to_pod_part(b, flags, info->type, info, &iter, val, len);

View file

@ -356,6 +356,12 @@ static inline bool spa_json_get_error(struct spa_json *iter, const char *start,
return true; return true;
} }
static inline int spa_json_begin(struct spa_json * iter, const char *data, size_t size, const char **val)
{
spa_json_init(iter, data, size);
return spa_json_next(iter, val);
}
static inline int spa_json_enter_container(struct spa_json *iter, struct spa_json *sub, char type) static inline int spa_json_enter_container(struct spa_json *iter, struct spa_json *sub, char type)
{ {
const char *value; const char *value;

View file

@ -123,8 +123,7 @@ static int process_json(const char *filename, void *buf, size_t size)
struct spa_json it; struct spa_json it;
const char *value; const char *value;
spa_json_init(&it, buf, size); if ((len = spa_json_begin(&it, buf, size, &value)) <= 0) {
if ((len = spa_json_next(&it, &value)) <= 0) {
fprintf(stderr, "not a valid file '%s': %s\n", filename, spa_strerror(len)); fprintf(stderr, "not a valid file '%s': %s\n", filename, spa_strerror(len));
return -EINVAL; return -EINVAL;
} }

View file

@ -806,8 +806,7 @@ static uint32_t format_info_get_format(const struct format_info *info)
if ((str = pw_properties_get(info->props, "format.sample_format")) == NULL) if ((str = pw_properties_get(info->props, "format.sample_format")) == NULL)
return SPA_AUDIO_FORMAT_UNKNOWN; return SPA_AUDIO_FORMAT_UNKNOWN;
spa_json_init(&it[0], str, strlen(str)); if ((len = spa_json_begin(&it[0], str, strlen(str), &val)) <= 0)
if ((len = spa_json_next(&it[0], &val)) <= 0)
return SPA_AUDIO_FORMAT_UNKNOWN; return SPA_AUDIO_FORMAT_UNKNOWN;
if (spa_json_is_string(val, len)) if (spa_json_is_string(val, len))
@ -825,8 +824,7 @@ static int format_info_get_rate(const struct format_info *info)
if ((str = pw_properties_get(info->props, "format.rate")) == NULL) if ((str = pw_properties_get(info->props, "format.rate")) == NULL)
return -ENOENT; return -ENOENT;
spa_json_init(&it[0], str, strlen(str)); if ((len = spa_json_begin(&it[0], str, strlen(str), &val)) <= 0)
if ((len = spa_json_next(&it[0], &val)) <= 0)
return -EINVAL; return -EINVAL;
if (spa_json_is_int(val, len)) { if (spa_json_is_int(val, len)) {
if (spa_json_parse_int(val, len, &v) <= 0) if (spa_json_parse_int(val, len, &v) <= 0)
@ -862,8 +860,7 @@ int format_info_to_spec(const struct format_info *info, struct sample_spec *ss,
if ((str = pw_properties_get(info->props, "format.channels")) == NULL) if ((str = pw_properties_get(info->props, "format.channels")) == NULL)
return -ENOENT; return -ENOENT;
spa_json_init(&it[0], str, strlen(str)); if ((len = spa_json_begin(&it[0], str, strlen(str), &val)) <= 0)
if ((len = spa_json_next(&it[0], &val)) <= 0)
return -EINVAL; return -EINVAL;
if (spa_json_is_float(val, len)) { if (spa_json_is_float(val, len)) {
if (spa_json_parse_float(val, len, &f) <= 0) if (spa_json_parse_float(val, len, &f) <= 0)
@ -877,8 +874,7 @@ int format_info_to_spec(const struct format_info *info, struct sample_spec *ss,
return -ENOTSUP; return -ENOTSUP;
if ((str = pw_properties_get(info->props, "format.channel_map")) != NULL) { if ((str = pw_properties_get(info->props, "format.channel_map")) != NULL) {
spa_json_init(&it[0], str, strlen(str)); if ((len = spa_json_begin(&it[0], str, strlen(str), &val)) <= 0)
if ((len = spa_json_next(&it[0], &val)) <= 0)
return -EINVAL; return -EINVAL;
if (!spa_json_is_string(val, len)) if (!spa_json_is_string(val, len))
return -EINVAL; return -EINVAL;

View file

@ -66,8 +66,7 @@ static int do_merge_section(void *data, const char *location, const char *sectio
int l; int l;
const char *value; const char *value;
spa_json_init(&it[0], str, len); if ((l = spa_json_begin(&it[0], str, len, &value)) <= 0)
if ((l = spa_json_next(&it[0], &value)) <= 0)
return 0; return 0;
if (spa_json_is_array(value, l)) { if (spa_json_is_array(value, l)) {

View file

@ -1144,8 +1144,7 @@ static void json_dump(struct data *d, const char *key, const char *value)
struct spa_json it[1]; struct spa_json it[1];
int len; int len;
const char *val; const char *val;
spa_json_init(&it[0], value, strlen(value)); if ((len = spa_json_begin(&it[0], value, strlen(value), &val)) >= 0)
if ((len = spa_json_next(&it[0], &val)) >= 0)
json_dump_val(d, key, &it[0], val, len); json_dump_val(d, key, &it[0], val, len);
} }