Internally, paths are represented as lists of strings, where
* path "/" is represented by []
* path "/local/domain/0" is represented by ["local"; "domain"; "0"]
(see comment for Store.Path.t).
However, the traversal function generated paths like
[""; "local"; "domain"; "0"]
because the name of the root node is "". Change it to generate paths
correctly.
Furthermore, the function passed to Store.dump_fct would render the node
"foo" under the path [] as "//foo". Change this to return "/foo".
Signed-off-by: Jonathan Davies <jonathan.davies@citrix.com>
Reviewed-by: Wei Liu <wei.liu2@citrix.com>
Reviewed-by: Christian Lindig <christian.lindig@citrix.com>
Release-acked-by: Julien Grall <julien.grall@arm.com>
| "" :: path when is_valid path -> path
| _ -> raise Define.Invalid_path
+let of_path_and_name path name =
+ match path, name with
+ | [], "" -> []
+ | _ -> path @ [name]
+
let create path connection_path =
of_string (Utils.path_validate path connection_path)
let traversal root_node f =
let rec _traversal path node =
f path node;
- List.iter (_traversal (path @ [ Symbol.to_string node.Node.name ])) node.Node.children
+ let node_path = Path.of_path_and_name path (Symbol.to_string node.Node.name) in
+ List.iter (_traversal node_path) node.Node.children
in
_traversal [] root_node
(* dump the store *)
Store.dump_fct store (fun path node ->
let name, perms, value = Store.Node.unpack node in
- let fullpath = (Store.Path.to_string path) ^ "/" ^ name in
+ let fullpath = Store.Path.to_string (Store.Path.of_path_and_name path name) in
let permstr = Perms.Node.to_string perms in
fprintf chan "store,%s,%s,%s\n" (hexify fullpath) (hexify permstr) (hexify value)
);