xpath BUGFIX child axis does not include siblings
Fixes #1938
diff --git a/src/xpath.c b/src/xpath.c
index 1136bad..919ab23 100644
--- a/src/xpath.c
+++ b/src/xpath.c
@@ -6584,7 +6584,7 @@
}
assert(scnode);
- if (!lysc_data_parent(scnode)) {
+ if ((axis != LYXP_AXIS_CHILD) && !lysc_data_parent(scnode)) {
/* iterating over top-level nodes, find next */
while (lysc_data_parent(*iter)) {
*iter = lysc_data_parent(*iter);
diff --git a/tests/utests/basic/test_xpath.c b/tests/utests/basic/test_xpath.c
index 71252b9..6bacb27 100644
--- a/tests/utests/basic/test_xpath.c
+++ b/tests/utests/basic/test_xpath.c
@@ -96,6 +96,7 @@
UTEST_SETUP;
UTEST_ADD_MODULE(schema_a, LYS_IN_YANG, NULL, NULL);
+ lys_parse_path(UTEST_LYCTX, TESTS_DIR_MODULES_YANG "/ietf-interfaces@2014-05-08.yang", LYS_IN_YANG, NULL);
return 0;
}
@@ -485,6 +486,14 @@
assert_int_equal(6, set->count);
ly_set_free(set, NULL);
+ assert_int_equal(LY_SUCCESS, lys_find_xpath_atoms(UTEST_LYCTX, NULL, "/ietf-interfaces:interfaces/*", 0, &set));
+ assert_int_equal(2, set->count);
+ ly_set_free(set, NULL);
+
+ assert_int_equal(LY_SUCCESS, lys_find_xpath_atoms(UTEST_LYCTX, NULL, "/*", 0, &set));
+ assert_int_equal(13, set->count);
+ ly_set_free(set, NULL);
+
/*
* axes
*/