summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn Estabrook <jestabro@vyos.io>2025-04-04 19:30:34 -0500
committerJohn Estabrook <jestabro@vyos.io>2025-04-11 13:36:10 -0500
commit603549e32030ed94bb95095a50c896c178e6a252 (patch)
tree3085b3d8189996f9f8891fa96df06b544a3fd0e0 /src
parentccdc583f0f02583771fadae353166ef1a904f4e3 (diff)
downloadvyos1x-config-603549e32030ed94bb95095a50c896c178e6a252.tar.gz
vyos1x-config-603549e32030ed94bb95095a50c896c178e6a252.zip
T7321: move load_config util from vyconf for general use
Diffstat (limited to 'src')
-rw-r--r--src/config_file.ml33
-rw-r--r--src/config_file.mli2
2 files changed, 35 insertions, 0 deletions
diff --git a/src/config_file.ml b/src/config_file.ml
new file mode 100644
index 0000000..5fdf924
--- /dev/null
+++ b/src/config_file.ml
@@ -0,0 +1,33 @@
+(* strip commponent version string *)
+let strip_version s =
+ let rex = Pcre.regexp ~flags:[`MULTILINE;`DOTALL] "(^//.*)" in
+ let res = Pcre.split ~max:0 ~rex s in
+ match res with
+ | h :: _ -> Ok h
+ | [] -> Error "Failure stripping version string from config"
+
+let load_config file =
+ try
+ let chan = open_in file in
+ let s = really_input_string chan (in_channel_length chan) in
+ let () = close_in chan in
+ let prep = strip_version s in
+ let s = match prep with
+ | Ok s -> s
+ | Error msg -> raise (Sys_error msg)
+ in
+ let config = Parser.from_string s in
+ Ok config
+ with
+ | Sys_error msg -> Error msg
+ | Util.Syntax_error (opt, msg) ->
+ begin
+ match opt with
+ | None ->
+ let out = Printf.sprintf "Parse error: %s\n" msg
+ in Error out
+ | Some (line, pos) ->
+ let out = Printf.sprintf "Parse error: %s line %d pos %d\n" msg line pos
+ in Error out
+ end
+
diff --git a/src/config_file.mli b/src/config_file.mli
new file mode 100644
index 0000000..607a8b5
--- /dev/null
+++ b/src/config_file.mli
@@ -0,0 +1,2 @@
+
+val load_config : string -> (Config_tree.t, string) result