summaryrefslogtreecommitdiff
path: root/src/cstore
diff options
context:
space:
mode:
authorAn-Cheng Huang <ancheng@vyatta.com>2011-01-05 16:44:31 -0800
committerAn-Cheng Huang <ancheng@vyatta.com>2011-01-05 16:52:12 -0800
commitd4111b01462641baa21978a78390215987a5958a (patch)
treee6a53a4f19f8b197aeb45879d90384b8fd2538d1 /src/cstore
parent15022218e4e6983c661ccf1e7beefd598a96e628 (diff)
downloadvyatta-cfg-d4111b01462641baa21978a78390215987a5958a.tar.gz
vyatta-cfg-d4111b01462641baa21978a78390215987a5958a.zip
fix for bug 6641
* change shell API to only use "edit level" when needed. * add factory functions for cstore creation to simplify code. (cherry picked from commit 2208bfef1004295d3227492c6a3e9d7b36903db5)
Diffstat (limited to 'src/cstore')
-rw-r--r--src/cstore/cstore-c.cpp7
-rw-r--r--src/cstore/cstore.cpp17
-rw-r--r--src/cstore/cstore.hpp4
-rw-r--r--src/cstore/unionfs/cstore-unionfs.hpp2
4 files changed, 26 insertions, 4 deletions
diff --git a/src/cstore/cstore-c.cpp b/src/cstore/cstore-c.cpp
index c835efe..292ff38 100644
--- a/src/cstore/cstore-c.cpp
+++ b/src/cstore/cstore-c.cpp
@@ -15,11 +15,12 @@
*/
#include <cstring>
+#include <cstdlib>
#include <vector>
#include <string>
+#include <cstore/cstore.hpp>
#include <cstore/cstore-c.h>
-#include <cstore/unionfs/cstore-unionfs.hpp>
static void
_get_str_vec(vector<string>& vec, const char *strs[], int num_strs)
@@ -32,14 +33,14 @@ _get_str_vec(vector<string>& vec, const char *strs[], int num_strs)
void *
cstore_init(void)
{
- Cstore *handle = new UnionfsCstore();
+ Cstore *handle = Cstore::createCstore(false);
return (void *) handle;
}
void
cstore_free(void *handle)
{
- UnionfsCstore *h = (UnionfsCstore *) handle;
+ Cstore *h = (Cstore *) handle;
delete h;
}
diff --git a/src/cstore/cstore.cpp b/src/cstore/cstore.cpp
index 2aefed6..b6b55be 100644
--- a/src/cstore/cstore.cpp
+++ b/src/cstore/cstore.cpp
@@ -30,6 +30,7 @@
#include <cli_cstore.h>
#include <cstore/cstore.hpp>
+#include <cstore/unionfs/cstore-unionfs.hpp>
#include <cstore/cstore-varref.hpp>
#include <cnode/cnode.hpp>
#include <cnode/cnode-algorithm.hpp>
@@ -95,6 +96,22 @@ Cstore::Cstore(string& env)
}
+////// factory functions
+// for "current session" (see UnionfsCstore constructor for details)
+Cstore *
+Cstore::createCstore(bool use_edit_level)
+{
+ return (new UnionfsCstore(use_edit_level));
+}
+
+// for "specific session" (see UnionfsCstore constructor for details)
+Cstore *
+Cstore::createCstore(const string& session_id, string& env)
+{
+ return (new UnionfsCstore(session_id, env));
+}
+
+
////// public interface
/* check if specified "logical path" corresponds to a valid template.
* validate_vals: whether to validate "values" along specified path.
diff --git a/src/cstore/cstore.hpp b/src/cstore/cstore.hpp
index fcee26f..e22bb0d 100644
--- a/src/cstore/cstore.hpp
+++ b/src/cstore/cstore.hpp
@@ -53,6 +53,10 @@ public:
Cstore(string& env);
virtual ~Cstore() {};
+ // factory functions
+ static Cstore *createCstore(bool use_edit_level = false);
+ static Cstore *createCstore(const string& session_id, string& env);
+
// types
template<class K, class V>
class MapT : public tr1::unordered_map<K, V> {};
diff --git a/src/cstore/unionfs/cstore-unionfs.hpp b/src/cstore/unionfs/cstore-unionfs.hpp
index 9799522..2dc2c0b 100644
--- a/src/cstore/unionfs/cstore-unionfs.hpp
+++ b/src/cstore/unionfs/cstore-unionfs.hpp
@@ -33,7 +33,7 @@ namespace b_fs = boost::filesystem;
class UnionfsCstore : public Cstore {
public:
- UnionfsCstore(bool use_edit_level = false);
+ UnionfsCstore(bool use_edit_level);
UnionfsCstore(const string& session_id, string& env);
virtual ~UnionfsCstore();