diff options
| author | John Estabrook <jestabro@vyos.io> | 2025-04-04 19:30:34 -0500 |
|---|---|---|
| committer | John Estabrook <jestabro@vyos.io> | 2025-04-11 13:36:10 -0500 |
| commit | 603549e32030ed94bb95095a50c896c178e6a252 (patch) | |
| tree | 3085b3d8189996f9f8891fa96df06b544a3fd0e0 /src | |
| parent | ccdc583f0f02583771fadae353166ef1a904f4e3 (diff) | |
| download | vyos1x-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.ml | 33 | ||||
| -rw-r--r-- | src/config_file.mli | 2 |
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 |
