}
ret = ec_node_parse_child(node->child, state, childvec);
+ if (ret < 0)
+ goto fail;
+
ec_strvec_free(childvec);
childvec = NULL;
if (ret == EC_PARSED_NOMATCH)
break;
- else if (ret < 0)
- goto fail;
/* it matches an empty strvec, no need to continue */
if (ret == 0) {
static int
__ec_node_many_complete(struct ec_node_many *node, unsigned int max,
struct ec_completed *completed,
- struct ec_parsed *parsed,
const struct ec_strvec *strvec)
{
+ struct ec_parsed *parsed = ec_completed_get_state(completed);
struct ec_strvec *childvec = NULL;
unsigned int i;
int ret;
/* first, try to complete with the child node */
- ret = ec_node_complete_child(node->child, completed, parsed, strvec);
+ ret = ec_node_complete_child(node->child, completed, strvec);
if (ret < 0)
goto fail;
goto fail;
ret = ec_node_parse_child(node->child, parsed, childvec);
- if (ret < 0 && ret != EC_PARSED_NOMATCH)
+ if (ret < 0)
goto fail;
ec_strvec_free(childvec);
goto fail;
}
- ret = __ec_node_many_complete(node, max, completed,
- parsed, childvec);
+ ret = __ec_node_many_complete(node, max, completed, childvec);
ec_parsed_del_last_child(parsed);
ec_strvec_free(childvec);
childvec = NULL;
static int
ec_node_many_complete(const struct ec_node *gen_node,
struct ec_completed *completed,
- struct ec_parsed *parsed,
const struct ec_strvec *strvec)
{
struct ec_node_many *node = (struct ec_node_many *)gen_node;
return __ec_node_many_complete(node, node->max, completed,
- parsed, strvec);
+ strvec);
}
static void ec_node_many_free_priv(struct ec_node *gen_node)
static int ec_node_many_testcase(void)
{
struct ec_node *node;
- int ret = 0;
+ int testres = 0;
- node = ec_node_many(NULL, ec_node_str(NULL, "foo"), 0, 0);
+ node = ec_node_many(EC_NO_ID, ec_node_str(EC_NO_ID, "foo"), 0, 0);
if (node == NULL) {
EC_LOG(EC_LOG_ERR, "cannot create node\n");
return -1;
}
- ret |= EC_TEST_CHECK_PARSE(node, 0);
- ret |= EC_TEST_CHECK_PARSE(node, 0, "bar");
- ret |= EC_TEST_CHECK_PARSE(node, 1, "foo", "bar");
- ret |= EC_TEST_CHECK_PARSE(node, 2, "foo", "foo", "bar");
- ret |= EC_TEST_CHECK_PARSE(node, 0);
+ testres |= EC_TEST_CHECK_PARSE(node, 0);
+ testres |= EC_TEST_CHECK_PARSE(node, 0, "bar");
+ testres |= EC_TEST_CHECK_PARSE(node, 1, "foo", "bar");
+ testres |= EC_TEST_CHECK_PARSE(node, 2, "foo", "foo", "bar");
+ testres |= EC_TEST_CHECK_PARSE(node, 0);
ec_node_free(node);
- node = ec_node_many(NULL, ec_node_str(NULL, "foo"), 1, 0);
+ node = ec_node_many(EC_NO_ID, ec_node_str(EC_NO_ID, "foo"), 1, 0);
if (node == NULL) {
EC_LOG(EC_LOG_ERR, "cannot create node\n");
return -1;
}
- ret |= EC_TEST_CHECK_PARSE(node, -1, "bar");
- ret |= EC_TEST_CHECK_PARSE(node, 1, "foo", "bar");
- ret |= EC_TEST_CHECK_PARSE(node, 2, "foo", "foo", "bar");
- ret |= EC_TEST_CHECK_PARSE(node, -1);
+ testres |= EC_TEST_CHECK_PARSE(node, -1, "bar");
+ testres |= EC_TEST_CHECK_PARSE(node, 1, "foo", "bar");
+ testres |= EC_TEST_CHECK_PARSE(node, 2, "foo", "foo", "bar");
+ testres |= EC_TEST_CHECK_PARSE(node, -1);
ec_node_free(node);
- node = ec_node_many(NULL, ec_node_str(NULL, "foo"), 1, 2);
+ node = ec_node_many(EC_NO_ID, ec_node_str(EC_NO_ID, "foo"), 1, 2);
if (node == NULL) {
EC_LOG(EC_LOG_ERR, "cannot create node\n");
return -1;
}
- ret |= EC_TEST_CHECK_PARSE(node, -1, "bar");
- ret |= EC_TEST_CHECK_PARSE(node, 1, "foo", "bar");
- ret |= EC_TEST_CHECK_PARSE(node, 2, "foo", "foo", "bar");
- ret |= EC_TEST_CHECK_PARSE(node, 2, "foo", "foo", "foo");
- ret |= EC_TEST_CHECK_PARSE(node, -1);
+ testres |= EC_TEST_CHECK_PARSE(node, -1, "bar");
+ testres |= EC_TEST_CHECK_PARSE(node, 1, "foo", "bar");
+ testres |= EC_TEST_CHECK_PARSE(node, 2, "foo", "foo", "bar");
+ testres |= EC_TEST_CHECK_PARSE(node, 2, "foo", "foo", "foo");
+ testres |= EC_TEST_CHECK_PARSE(node, -1);
ec_node_free(node);
/* test completion */
- node = ec_node_many(NULL, ec_node_str(NULL, "foo"), 2, 4);
+ node = ec_node_many(EC_NO_ID, ec_node_str(EC_NO_ID, "foo"), 2, 4);
if (node == NULL) {
EC_LOG(EC_LOG_ERR, "cannot create node\n");
return -1;
}
- ret |= EC_TEST_CHECK_COMPLETE(node,
+ testres |= EC_TEST_CHECK_COMPLETE(node,
"", EC_NODE_ENDLIST,
"foo", EC_NODE_ENDLIST);
- ret |= EC_TEST_CHECK_COMPLETE(node,
+ testres |= EC_TEST_CHECK_COMPLETE(node,
"f", EC_NODE_ENDLIST,
"foo", EC_NODE_ENDLIST);
- ret |= EC_TEST_CHECK_COMPLETE(node,
+ testres |= EC_TEST_CHECK_COMPLETE(node,
"foo", EC_NODE_ENDLIST,
"foo", EC_NODE_ENDLIST);
- ret |= EC_TEST_CHECK_COMPLETE(node,
+ testres |= EC_TEST_CHECK_COMPLETE(node,
"foo", "", EC_NODE_ENDLIST,
"foo", EC_NODE_ENDLIST);
- ret |= EC_TEST_CHECK_COMPLETE(node,
+ testres |= EC_TEST_CHECK_COMPLETE(node,
"foo", "foo", "", EC_NODE_ENDLIST,
"foo", EC_NODE_ENDLIST);
- ret |= EC_TEST_CHECK_COMPLETE(node,
+ testres |= EC_TEST_CHECK_COMPLETE(node,
"foo", "foo", "foo", "", EC_NODE_ENDLIST,
"foo", EC_NODE_ENDLIST);
- ret |= EC_TEST_CHECK_COMPLETE(node,
+ testres |= EC_TEST_CHECK_COMPLETE(node,
"foo", "foo", "foo", "foo", "", EC_NODE_ENDLIST,
EC_NODE_ENDLIST);
ec_node_free(node);
- return ret;
+ return testres;
}
/* LCOV_EXCL_STOP */