[LTP] [PATCH v3 4/4] tst_run_shell.c: Add new function handle new needs_cmds
Wei Gao
wegao@suse.com
Fri Oct 10 08:45:50 CEST 2025
Signed-off-by: Wei Gao <wegao@suse.com>
---
testcases/lib/tst_run_shell.c | 61 ++++++++++++++++++++++++++++++++++-
1 file changed, 60 insertions(+), 1 deletion(-)
diff --git a/testcases/lib/tst_run_shell.c b/testcases/lib/tst_run_shell.c
index 7a446e004..a6e0d1d29 100644
--- a/testcases/lib/tst_run_shell.c
+++ b/testcases/lib/tst_run_shell.c
@@ -175,6 +175,23 @@ static ujson_obj fs_obj = {
.attr_cnt = UJSON_ARRAY_SIZE(fs_attrs),
};
+enum cmd_ids {
+ CMD,
+ OPTIONAL,
+ PRESENT,
+};
+
+static ujson_obj_attr cmd_attrs[] = {
+ UJSON_OBJ_ATTR_IDX(CMD, "cmd", UJSON_STR),
+ UJSON_OBJ_ATTR_IDX(OPTIONAL, "optional", UJSON_INT),
+ UJSON_OBJ_ATTR_IDX(PRESENT, "present", UJSON_INT),
+};
+
+static ujson_obj cmd_obj = {
+ .attrs = cmd_attrs,
+ .attr_cnt = UJSON_ARRAY_SIZE(cmd_attrs),
+};
+
static int parse_mnt_flags(ujson_reader *reader, ujson_val *val)
{
int ret = 0;
@@ -252,6 +269,48 @@ static struct tst_fs *parse_filesystems(ujson_reader *reader, ujson_val *val)
return ret;
}
+static struct tst_cmd *parse_cmds(ujson_reader *reader, ujson_val *val)
+{
+ unsigned int i = 0, cnt = 0;
+ struct tst_cmd *ret;
+
+ ujson_reader_state state = ujson_reader_state_save(reader);
+
+ UJSON_ARR_FOREACH(reader, val) {
+ if (val->type != UJSON_ARR) {
+ ujson_err(reader, "Expected array!");
+ return NULL;
+ }
+ ujson_arr_skip(reader);
+ cnt++;
+ }
+
+ ujson_reader_state_load(reader, state);
+
+ ret = SAFE_MALLOC(sizeof(struct tst_cmd) * (cnt + 1));
+ memset(&ret[cnt], 0, sizeof(ret[cnt]));
+
+ UJSON_ARR_FOREACH(reader, val) {
+ UJSON_OBJ_FOREACH_FILTER(reader, val, &cmd_obj, ujson_empty_obj) {
+ switch ((enum cmd_ids)val->idx) {
+ case CMD:
+ ret[i].cmd = strdup(val->val_str);
+ break;
+ case OPTIONAL:
+ ret[i].optional = val->val_int;
+ break;
+ case MKFS_VER:
+ ret[i].present = val->val_int;
+ break;
+ }
+ }
+
+ i++;
+ }
+
+ return ret;
+}
+
static struct tst_tag *parse_tags(ujson_reader *reader, ujson_val *val)
{
unsigned int i = 0, cnt = 0;
@@ -440,7 +499,7 @@ static void parse_metadata(void)
ujson_err(&reader, "ABI bits must be 32 or 64");
break;
case NEEDS_CMDS:
- test.needs_cmds = parse_strarr(&reader, &val);
+ test.needs_cmds = parse_cmds(&reader, &val);
break;
case NEEDS_DEVFS:
test.needs_devfs = val.val_bool;
--
2.51.0
More information about the ltp
mailing list