daemon: support containers as arguments

so that

ags = "foo=bar baz=5"

can be written as:

args = { foo = bar baz = 5 }
This commit is contained in:
Wim Taymans 2021-01-17 14:56:23 +01:00
parent ff416cdc9e
commit 23fd40df94
2 changed files with 31 additions and 17 deletions

View file

@ -145,9 +145,9 @@ static int parse_modules(struct data *d, const char *str)
return -EINVAL;
while (spa_json_get_string(&it[1], key, sizeof(key)-1) > 0) {
const char *val;
const char *val, *aval;
char *args = NULL, *flags = NULL;
int len;
int len, alen;
if ((len = spa_json_next(&it[1], &val)) <= 0)
break;
@ -156,18 +156,22 @@ static int parse_modules(struct data *d, const char *str)
continue;
if (spa_json_is_object(val, len)) {
char arg[512], aval[1024];
char arg[512];
spa_json_enter(&it[1], &it[2]);
while (spa_json_get_string(&it[2], arg, sizeof(arg)-1) > 0) {
if (spa_json_get_string(&it[2], aval, sizeof(aval)-1) <= 0)
if ((alen = spa_json_next(&it[2], &aval)) <= 0)
break;
if (strcmp(arg, "args") == 0) {
args = strdup(aval);
if (spa_json_is_container(aval, alen))
alen = spa_json_container_len(&it[2], aval, alen);
args = malloc(alen);
spa_json_parse_string(aval, alen, args);
} else if (strcmp(arg, "flags") == 0) {
flags = strdup(aval);
flags = strndup(aval, alen);
}
}
}
@ -223,9 +227,9 @@ static int parse_objects(struct data *d, const char *str)
return -EINVAL;
while (spa_json_get_string(&it[1], key, sizeof(key)-1) > 0) {
const char *val;
const char *val, *aval;
char *args = NULL, *flags = NULL;
int len;
int len, alen;
if ((len = spa_json_next(&it[1], &val)) <= 0)
break;
@ -234,18 +238,21 @@ static int parse_objects(struct data *d, const char *str)
continue;
if (spa_json_is_object(val, len)) {
char arg[512], aval[1024];
char arg[512];
spa_json_enter(&it[1], &it[2]);
while (spa_json_get_string(&it[2], arg, sizeof(arg)-1) > 0) {
if (spa_json_get_string(&it[2], aval, sizeof(aval)-1) <= 0)
if ((alen = spa_json_next(&it[2], &aval)) <= 0)
break;
if (strcmp(arg, "args") == 0) {
args = strdup(aval);
if (spa_json_is_container(aval, alen))
alen = spa_json_container_len(&it[2], aval, alen);
args = malloc(alen);
spa_json_parse_string(aval, alen, args);
} else if (strcmp(arg, "flags") == 0) {
flags = strdup(aval);
flags = strndup(aval, alen);
}
}
}