standardize copyright
[protos/libecoli.git] / lib / ecoli_node_re_lex.c
index 669c9fb..672e952 100644 (file)
@@ -1,3 +1,7 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright 2016, Olivier MATZ <zer0@droids-corp.org>
+ */
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdbool.h>
@@ -113,15 +117,16 @@ ec_node_re_lex_parse(const struct ec_node *gen_node,
        }
 
        ret = ec_node_parse_child(node->child, state, new_vec);
-       if (ret >= 0) {
-               if ((unsigned)ret == ec_strvec_len(new_vec)) {
-                       ret = 1;
-               } else {
-                       child_parsed = ec_parsed_get_last_child(state);
-                       ec_parsed_del_child(state, child_parsed);
-                       ec_parsed_free(child_parsed);
-                       ret = EC_PARSED_NOMATCH;
-               }
+       if (ret < 0)
+               goto fail;
+
+       if ((unsigned)ret == ec_strvec_len(new_vec)) {
+               ret = 1;
+       } else if (ret != EC_PARSED_NOMATCH) {
+               child_parsed = ec_parsed_get_last_child(state);
+               ec_parsed_del_child(state, child_parsed);
+               ec_parsed_free(child_parsed);
+               ret = EC_PARSED_NOMATCH;
        }
 
        ec_strvec_free(new_vec);
@@ -222,14 +227,14 @@ struct ec_node *ec_node_re_lex(const char *id, struct ec_node *child)
 static int ec_node_re_lex_testcase(void)
 {
        struct ec_node *node;
-       int ret = 0;
-
-       node = ec_node_re_lex(NULL,
-               ec_node_many(NULL,
-                       EC_NODE_OR(NULL,
-                               ec_node_str(NULL, "foo"),
-                               ec_node_str(NULL, "bar"),
-                               ec_node_int(NULL, 0, 1000, 0)
+       int ret, testres = 0;
+
+       node = ec_node_re_lex(EC_NO_ID,
+               ec_node_many(EC_NO_ID,
+                       EC_NODE_OR(EC_NO_ID,
+                               ec_node_str(EC_NO_ID, "foo"),
+                               ec_node_str(EC_NO_ID, "bar"),
+                               ec_node_int(EC_NO_ID, 0, 1000, 0)
                        ), 0, 0
                )
        );
@@ -238,27 +243,32 @@ static int ec_node_re_lex_testcase(void)
                return -1;
        }
 
-       /* XXX add ^ automatically ? */
-       ret |= ec_node_re_lex_add(node, "[a-zA-Z]+", 1);
-       ret |= ec_node_re_lex_add(node, "[0-9]+", 1);
-       ret |= ec_node_re_lex_add(node, "=", 1);
-       ret |= ec_node_re_lex_add(node, "-", 1);
-       ret |= ec_node_re_lex_add(node, "\\+", 1);
-       ret |= ec_node_re_lex_add(node, "[      ]+", 0);
+       ret = ec_node_re_lex_add(node, "[a-zA-Z]+", 1);
+       testres |= EC_TEST_CHECK(ret == 0, "cannot add regexp");
+       ret = ec_node_re_lex_add(node, "[0-9]+", 1);
+       testres |= EC_TEST_CHECK(ret == 0, "cannot add regexp");
+       ret = ec_node_re_lex_add(node, "=", 1);
+       testres |= EC_TEST_CHECK(ret == 0, "cannot add regexp");
+       ret = ec_node_re_lex_add(node, "-", 1);
+       testres |= EC_TEST_CHECK(ret == 0, "cannot add regexp");
+       ret = ec_node_re_lex_add(node, "\\+", 1);
+       testres |= EC_TEST_CHECK(ret == 0, "cannot add regexp");
+       ret = ec_node_re_lex_add(node, "[       ]+", 0);
+       testres |= EC_TEST_CHECK(ret == 0, "cannot add regexp");
        if (ret != 0) {
                EC_LOG(EC_LOG_ERR, "cannot add regexp to node\n");
                ec_node_free(node);
                return -1;
        }
 
-       ret |= EC_TEST_CHECK_PARSE(node, 1, "  foo bar  324 bar234");
-       ret |= EC_TEST_CHECK_PARSE(node, 1, "foo bar324");
-       ret |= EC_TEST_CHECK_PARSE(node, 1, "");
-       ret |= EC_TEST_CHECK_PARSE(node, -1, "foobar");
+       testres |= EC_TEST_CHECK_PARSE(node, 1, "  foo bar  324 bar234");
+       testres |= EC_TEST_CHECK_PARSE(node, 1, "foo bar324");
+       testres |= EC_TEST_CHECK_PARSE(node, 1, "");
+       testres |= EC_TEST_CHECK_PARSE(node, -1, "foobar");
 
        ec_node_free(node);
 
-       return ret;
+       return testres;
 }
 /* LCOV_EXCL_STOP */