//-------------------------------------------------------------------------------------------------- le_result_t ni_GoToNextSibling ( ni_IteratorRef_t iteratorRef ///< The iterator object to access. ) //-------------------------------------------------------------------------------------------------- { // If the current node exists, then look to it for a sibling node. Otherwise, a non-existant // node can not have siblings. if (iteratorRef->currentNodeRef != NULL) { tdb_NodeRef_t newNodeRef = tdb_GetNextActiveSiblingNode(iteratorRef->currentNodeRef); if (newNodeRef == NULL) { return LE_NOT_FOUND; } // Looks like we found a new node, so replace the node name at the end of the path. iteratorRef->currentNodeRef = newNodeRef; char namePtr[MAX_NODE_NAME] = { 0 }; tdb_GetNodeName(newNodeRef, namePtr, MAX_NODE_NAME); if (le_pathIter_GoToEnd(iteratorRef->pathIterRef) != LE_NOT_FOUND) { le_pathIter_Truncate(iteratorRef->pathIterRef); } le_pathIter_Append(iteratorRef->pathIterRef, namePtr); return LE_OK; } return LE_NOT_FOUND; }
static void TestUnixStyleAppends(void) { LE_INFO("======== Test Unix Style Appends."); { le_pathIter_Ref_t iteratorRef = le_pathIter_CreateForUnix("/a/b/c"); LE_TEST(le_pathIter_Append(iteratorRef, "x/y/z") == LE_OK); LE_TEST(TestPath(iteratorRef, "/a/b/c/x/y/z")); LE_TEST(le_pathIter_IsAbsolute(iteratorRef) == true); le_pathIter_Delete(iteratorRef); } { le_pathIter_Ref_t iteratorRef = le_pathIter_CreateForUnix("/a/b/c"); LE_TEST(le_pathIter_Append(iteratorRef, "../x/y/z") == LE_OK); LE_TEST(TestPath(iteratorRef, "/a/b/x/y/z")); LE_TEST(le_pathIter_IsAbsolute(iteratorRef) == true); le_pathIter_Delete(iteratorRef); } { le_pathIter_Ref_t iteratorRef = le_pathIter_CreateForUnix("/a/b/c"); LE_TEST(le_pathIter_Append(iteratorRef, "../../x/y/z") == LE_OK); LE_TEST(TestPath(iteratorRef, "/a/x/y/z")); LE_TEST(le_pathIter_IsAbsolute(iteratorRef) == true); le_pathIter_Delete(iteratorRef); } { le_pathIter_Ref_t iteratorRef = le_pathIter_CreateForUnix("/a/b/c"); LE_TEST(le_pathIter_Append(iteratorRef, "../../../x/y/z") == LE_OK); LE_TEST(TestPath(iteratorRef, "/x/y/z")); LE_TEST(le_pathIter_IsAbsolute(iteratorRef) == true); le_pathIter_Delete(iteratorRef); } { le_pathIter_Ref_t iteratorRef = le_pathIter_CreateForUnix("/a/b/c"); LE_TEST(le_pathIter_Append(iteratorRef, "../../../../x/y/z") == LE_UNDERFLOW); LE_TEST(TestPath(iteratorRef, "/")); LE_TEST(le_pathIter_IsAbsolute(iteratorRef) == true); le_pathIter_Delete(iteratorRef); } { le_pathIter_Ref_t iteratorRef = le_pathIter_CreateForUnix("a/b/c"); LE_TEST(le_pathIter_Append(iteratorRef, "../../../x/y/z") == LE_OK); LE_TEST(TestPath(iteratorRef, "x/y/z")); LE_TEST(le_pathIter_IsAbsolute(iteratorRef) == false); le_pathIter_Delete(iteratorRef); } { le_pathIter_Ref_t iteratorRef = le_pathIter_CreateForUnix("a/b/c"); LE_TEST(le_pathIter_Append(iteratorRef, "../../../../x/y/z") == LE_OK); LE_TEST(TestPath(iteratorRef, "../x/y/z")); LE_TEST(le_pathIter_IsAbsolute(iteratorRef) == false); le_pathIter_Delete(iteratorRef); } { le_pathIter_Ref_t iteratorRef = le_pathIter_CreateForUnix("/a/b/c"); LE_TEST(le_pathIter_Append(iteratorRef, "/x/y/z") == LE_OK); LE_TEST(TestPath(iteratorRef, "/x/y/z")); LE_TEST(le_pathIter_IsAbsolute(iteratorRef) == true); le_pathIter_Delete(iteratorRef); } { le_pathIter_Ref_t iteratorRef = le_pathIter_CreateForUnix("a/b/c"); LE_TEST(le_pathIter_Append(iteratorRef, "/x/y/z") == LE_OK); LE_TEST(TestPath(iteratorRef, "/x/y/z")); LE_TEST(le_pathIter_IsAbsolute(iteratorRef) == true); le_pathIter_Delete(iteratorRef); } { le_pathIter_Ref_t iteratorRef = le_pathIter_CreateForUnix("a/b/c"); LE_TEST(le_pathIter_Append(iteratorRef, "./x/y/z") == LE_OK); LE_TEST(TestPath(iteratorRef, "a/b/c/x/y/z")); LE_TEST(le_pathIter_IsAbsolute(iteratorRef) == false); le_pathIter_Delete(iteratorRef); } { le_pathIter_Ref_t iteratorRef = le_pathIter_CreateForUnix(""); LE_TEST(le_pathIter_Append(iteratorRef, "./x/y/./z") == LE_OK); LE_TEST(TestPath(iteratorRef, "./x/y/z")); LE_TEST(le_pathIter_IsAbsolute(iteratorRef) == false); le_pathIter_Delete(iteratorRef); } { le_pathIter_Ref_t iteratorRef = le_pathIter_CreateForUnix(""); LE_TEST(le_pathIter_Append(iteratorRef, "/a//path/to/a///some/../place") == LE_OK); LE_TEST(TestPath(iteratorRef, "/a/path/to/a/place")); LE_TEST(le_pathIter_IsAbsolute(iteratorRef) == true); le_pathIter_Delete(iteratorRef); } { le_pathIter_Ref_t iteratorRef = le_pathIter_Create("", "::", "^^", "__"); LE_TEST(le_pathIter_Append(iteratorRef, "__::a::::path::to::__::a::some::^^::place") == LE_OK); LE_TEST(TestPath(iteratorRef, "__::a::path::to::a::place")); LE_TEST(le_pathIter_IsAbsolute(iteratorRef) == false); le_pathIter_Delete(iteratorRef); } { le_pathIter_Ref_t iteratorRef = le_pathIter_Create("::", "::", "^^", "__"); LE_TEST(le_pathIter_Append(iteratorRef, "__::a::::path::to::__::a::some::^^::place") == LE_OK); LE_TEST(TestPath(iteratorRef, "::a::path::to::a::place")); LE_TEST(le_pathIter_IsAbsolute(iteratorRef) == true); le_pathIter_Delete(iteratorRef); } { le_pathIter_Ref_t iteratorRef = le_pathIter_Create("", "/", NULL, NULL); LE_TEST(le_pathIter_Append(iteratorRef, "/a//path/./to/a///some/../place") == LE_OK); LE_TEST(TestPath(iteratorRef, "/a/path/./to/a/some/../place")); LE_TEST(le_pathIter_IsAbsolute(iteratorRef) == true); le_pathIter_Delete(iteratorRef); } { le_pathIter_Ref_t iteratorRef = le_pathIter_CreateForUnix(""); LE_TEST(le_pathIter_Append(iteratorRef, "../../../a//path/") == LE_OK); LE_TEST(TestPath(iteratorRef, "../../../a/path")); LE_TEST(le_pathIter_IsAbsolute(iteratorRef) == false); le_pathIter_Delete(iteratorRef); } { le_pathIter_Ref_t iteratorRef = le_pathIter_CreateForUnix(""); LE_TEST(le_pathIter_Append(iteratorRef, "/a//path/to/a///some/../place") == LE_OK); LE_TEST(TestPath(iteratorRef, "/a/path/to/a/place")); LE_TEST(le_pathIter_IsAbsolute(iteratorRef) == true); LE_TEST(le_pathIter_GoToStart(iteratorRef) == LE_OK); LE_TEST(le_pathIter_GoToNext(iteratorRef) == LE_OK); LE_TEST(le_pathIter_GoToNext(iteratorRef) == LE_OK); LE_TEST(le_pathIter_GoToNext(iteratorRef) == LE_OK); le_pathIter_Truncate(iteratorRef); LE_TEST(le_pathIter_Append(iteratorRef, "nowhere") == LE_OK); LE_TEST(TestPath(iteratorRef, "/a/path/to/nowhere")); le_pathIter_Delete(iteratorRef); } { le_pathIter_Ref_t iteratorRef = le_pathIter_CreateForUnix(""); LE_TEST(le_pathIter_Append(iteratorRef, "/a//path/to/a///some/../place") == LE_OK); LE_TEST(TestPath(iteratorRef, "/a/path/to/a/place")); LE_TEST(le_pathIter_IsAbsolute(iteratorRef) == true); LE_TEST(le_pathIter_Append(iteratorRef, "../../nowhere") == LE_OK); LE_TEST(TestPath(iteratorRef, "/a/path/to/nowhere")); le_pathIter_Delete(iteratorRef); } { le_pathIter_Ref_t iteratorRef = le_pathIter_CreateForUnix("/a/b/c"); LE_TEST(TestPath(iteratorRef, "/a/b/c")); LE_TEST(le_pathIter_Append(iteratorRef, "..") == LE_OK); LE_TEST(TestPath(iteratorRef, "/a/b")); LE_TEST(le_pathIter_IsAbsolute(iteratorRef) == true); le_pathIter_Delete(iteratorRef); } { le_pathIter_Ref_t iteratorRef = le_pathIter_CreateForUnix("/a/b/c/"); LE_TEST(TestPath(iteratorRef, "/a/b/c")); LE_TEST(le_pathIter_Append(iteratorRef, "..") == LE_OK); LE_TEST(TestPath(iteratorRef, "/a/b")); LE_TEST(le_pathIter_IsAbsolute(iteratorRef) == true); le_pathIter_Delete(iteratorRef); } { le_pathIter_Ref_t iteratorRef = le_pathIter_CreateForUnix("a/b/c"); LE_TEST(TestPath(iteratorRef, "a/b/c")); LE_TEST(le_pathIter_Append(iteratorRef, "..") == LE_OK); LE_TEST(TestPath(iteratorRef, "a/b")); LE_TEST(le_pathIter_IsAbsolute(iteratorRef) == false); le_pathIter_Delete(iteratorRef); } { le_pathIter_Ref_t iteratorRef = le_pathIter_CreateForUnix("a/b/c/"); LE_TEST(TestPath(iteratorRef, "a/b/c")); LE_TEST(le_pathIter_Append(iteratorRef, "..") == LE_OK); LE_TEST(TestPath(iteratorRef, "a/b")); LE_TEST(le_pathIter_IsAbsolute(iteratorRef) == false); le_pathIter_Delete(iteratorRef); } { le_pathIter_Ref_t iteratorRef = le_pathIter_CreateForUnix("/a"); LE_TEST(TestPath(iteratorRef, "/a")); LE_TEST(le_pathIter_Append(iteratorRef, "..") == LE_OK); LE_TEST(TestPath(iteratorRef, "/")); LE_TEST(le_pathIter_IsAbsolute(iteratorRef) == true); le_pathIter_Delete(iteratorRef); } { le_pathIter_Ref_t iteratorRef = le_pathIter_CreateForUnix("/a/"); LE_TEST(TestPath(iteratorRef, "/a")); LE_TEST(le_pathIter_Append(iteratorRef, "..") == LE_OK); LE_TEST(TestPath(iteratorRef, "/")); LE_TEST(le_pathIter_IsAbsolute(iteratorRef) == true); le_pathIter_Delete(iteratorRef); } { le_pathIter_Ref_t iteratorRef = le_pathIter_CreateForUnix("a"); LE_TEST(TestPath(iteratorRef, "a")); LE_TEST(le_pathIter_Append(iteratorRef, "..") == LE_OK); LE_TEST(TestPath(iteratorRef, "")); LE_TEST(le_pathIter_IsAbsolute(iteratorRef) == false); le_pathIter_Delete(iteratorRef); } { le_pathIter_Ref_t iteratorRef = le_pathIter_CreateForUnix("a/"); LE_TEST(TestPath(iteratorRef, "a")); LE_TEST(le_pathIter_Append(iteratorRef, "..") == LE_OK); LE_TEST(TestPath(iteratorRef, "")); LE_TEST(le_pathIter_IsAbsolute(iteratorRef) == false); le_pathIter_Delete(iteratorRef); } }