From 7f6eb1ed2c2a9dc76227ac355446b6d4b6c27733 Mon Sep 17 00:00:00 2001 From: Daniil Baturin Date: Mon, 10 Feb 2020 22:59:27 +0100 Subject: T2026: make cli-shell-api showConfig fail on errors. --- src/cnode/cnode-algorithm.cpp | 24 +++++++++++++++--------- src/cnode/cnode-algorithm.hpp | 12 ++++++------ 2 files changed, 21 insertions(+), 15 deletions(-) (limited to 'src/cnode') diff --git a/src/cnode/cnode-algorithm.cpp b/src/cnode/cnode-algorithm.cpp index 379fb6a..7463534 100644 --- a/src/cnode/cnode-algorithm.cpp +++ b/src/cnode/cnode-algorithm.cpp @@ -24,6 +24,8 @@ #include #include +#include + using namespace cnode; using namespace cstore; using namespace std; @@ -851,31 +853,33 @@ _print_cmds_list(const char *op, vector& list) } ////// algorithms -void +int cnode::show_cfg_diff(const CfgNode& cfg1, const CfgNode& cfg2, Cpath& cur_path, bool show_def, bool hide_secret, bool context_diff) { if (cfg1.isInvalid() || cfg2.isInvalid()) { printf("Specified configuration path is not valid\n"); - return; + return VYOS_INVALID_PATH; } if ((cfg1.isEmpty() && cfg2.isEmpty()) || (!cfg1.exists() && !cfg2.exists())) { printf("Configuration under specified path is empty\n"); - return; + return VYOS_EMPTY_CONFIG; } // use an invalid value for initial last_ctx Cpath last_ctx; _show_diff(&cfg1, &cfg2, -1, cur_path, last_ctx, show_def, hide_secret, context_diff); + return VYOS_SUCCESS; } -void +int cnode::show_cfg(const CfgNode& cfg, bool show_def, bool hide_secret) { Cpath cur_path; - show_cfg_diff(cfg, cfg, cur_path, show_def, hide_secret); + int res = show_cfg_diff(cfg, cfg, cur_path, show_def, hide_secret); + return res; } void @@ -916,7 +920,7 @@ cnode::get_cmds(const CfgNode& cfg, vector& set_list, _get_cmds_diff(&cfg, &cfg, cur_path, del_list, set_list, com_list); } -void +int cnode::showConfig(const string& cfg1, const string& cfg2, const Cpath& path, bool show_def, bool hide_secret, bool context_diff, bool show_cmds, bool ignore_edit) @@ -960,14 +964,16 @@ cnode::showConfig(const string& cfg1, const string& cfg2, } if (!croot1.get() || !croot2.get()) { printf("Cannot parse specified config file(s)\n"); - return; + return 1; } if (show_cmds) { show_cmds_diff(*croot1, *croot2); + return 0; } else { - show_cfg_diff(*croot1, *croot2, cur_path, show_def, hide_secret, - context_diff); + int res = show_cfg_diff(*croot1, *croot2, cur_path, show_def, hide_secret, + context_diff); + return res; } } diff --git a/src/cnode/cnode-algorithm.hpp b/src/cnode/cnode-algorithm.hpp index d17204f..3ab2992 100644 --- a/src/cnode/cnode-algorithm.hpp +++ b/src/cnode/cnode-algorithm.hpp @@ -43,10 +43,10 @@ void cmp_non_leaf_nodes(const CfgNode *cfg1, const CfgNode *cfg2, bool& is_leaf_typeless, std::string& name, std::string& value); -void show_cfg_diff(const CfgNode& cfg1, const CfgNode& cfg2, +int show_cfg_diff(const CfgNode& cfg1, const CfgNode& cfg2, cstore::Cpath& cur_path, bool show_def = false, bool hide_secret = false, bool context_diff = false); -void show_cfg(const CfgNode& cfg, bool show_def = false, +int show_cfg(const CfgNode& cfg, bool show_def = false, bool hide_secret = false); void show_cmds_diff(const CfgNode& cfg1, const CfgNode& cfg2); @@ -62,10 +62,10 @@ void get_cmds(const CfgNode& cfg, std::vector& set_list, extern const std::string ACTIVE_CFG; extern const std::string WORKING_CFG; -void showConfig(const std::string& cfg1, const std::string& cfg2, - const cstore::Cpath& path, bool show_def = false, - bool hide_secret = false, bool context_diff = false, - bool show_cmds = false, bool ignore_edit = false); +int showConfig(const std::string& cfg1, const std::string& cfg2, + const cstore::Cpath& path, bool show_def = false, + bool hide_secret = false, bool context_diff = false, + bool show_cmds = false, bool ignore_edit = false); /* these functions provide the functionality necessary for the "config * file" shell API. basically the API uses the "cparse" interface to -- cgit v1.2.3