summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn Estabrook <jestabro@vyos.io>2025-08-05 12:27:45 -0500
committerJohn Estabrook <jestabro@vyos.io>2025-08-06 15:23:41 -0500
commitdd126f493e01968c8f4c7f4c420f31ecc599c242 (patch)
tree8ba857d53e6b624ca4791a056ee02ab5c052f4a6 /src
parent868b906e8af275a7121b59bb186c06602e9d8af4 (diff)
downloadvyos1x-config-dd126f493e01968c8f4c7f4c420f31ecc599c242.tar.gz
vyos1x-config-dd126f493e01968c8f4c7f4c420f31ecc599c242.zip
T7694: insert paths lexico-numerically in config_tree set
This enforces lexico-numerical order on insertion of new paths/tag-node values.
Diffstat (limited to 'src')
-rw-r--r--src/config_tree.ml2
-rw-r--r--src/vytree.ml6
-rw-r--r--src/vytree.mli2
3 files changed, 5 insertions, 5 deletions
diff --git a/src/config_tree.ml b/src/config_tree.ml
index 4d0f5df..ed15b0e 100644
--- a/src/config_tree.ml
+++ b/src/config_tree.ml
@@ -72,7 +72,7 @@ let set node path value behaviour =
let path_remaining = Vylist.complement path path_existing in
let values = match value with None -> [] | Some v -> [v] in
let end_data = {default_data with values=values; leaf=true} in
- Vytree.insert_multi_level default_data node path_existing path_remaining end_data
+ Vytree.insert_multi_level ~position:Lexical default_data node path_existing path_remaining end_data
let get_values node path =
let node' = Vytree.get node path in
diff --git a/src/vytree.ml b/src/vytree.ml
index dec1666..0f6e24a 100644
--- a/src/vytree.ml
+++ b/src/vytree.ml
@@ -142,13 +142,13 @@ let merge_children merge_data cmp node =
(* When inserting at a path that, entirely or partially,
does not exist yet, create missing nodes on the way with default data *)
-let rec insert_multi_level default_data node path_done path_remaining data =
+let rec insert_multi_level ?(position=Default) default_data node path_done path_remaining data =
match path_remaining with
| [] | [_] -> insert node (path_done @ path_remaining) data
| name :: names ->
let path_done = path_done @ [name] in
- let node = insert node path_done default_data in
- insert_multi_level default_data node path_done names data
+ let node = insert ~position:position node path_done default_data in
+ insert_multi_level ~position:position default_data node path_done names data
let delete node path =
do_with_child delete_immediate node path
diff --git a/src/vytree.mli b/src/vytree.mli
index 9839728..cce169c 100644
--- a/src/vytree.mli
+++ b/src/vytree.mli
@@ -27,7 +27,7 @@ val insert_maybe : ?position:position -> 'a t -> string list -> 'a -> 'a t
val insert_or_update : ?position:position -> 'a t -> string list -> 'a -> 'a t
-val insert_multi_level : 'a -> 'a t -> string list -> string list -> 'a -> 'a t
+val insert_multi_level : ?position:position -> 'a -> 'a t -> string list -> string list -> 'a -> 'a t
val merge_children : ('a -> 'a -> 'a) -> (string -> string -> int) -> 'a t -> 'a t