Browse Source

kdb: Change load function interface

Serj Kalichev 2 years ago
parent
commit
5a118673f4
5 changed files with 18 additions and 20 deletions
  1. 2 2
      dbs/libxml2/libxml2_plugin.c
  2. 2 2
      klish/kdb.h
  3. 7 4
      klish/kscheme/kdb.c
  4. 2 1
      klish/kxml.h
  5. 5 11
      klish/xml-helper/load.c

+ 2 - 2
dbs/libxml2/libxml2_plugin.c

@@ -17,7 +17,7 @@ uint8_t kdb_libxml2_major = KDB_MAJOR;
 uint8_t kdb_libxml2_minor = KDB_MINOR;
 
 
-kscheme_t *kdb_libxml2_load_scheme(kdb_t *db)
+bool_t kdb_libxml2_load_scheme(kdb_t *db, kscheme_t *scheme)
 {
 	faux_ini_t *ini = NULL;
 	faux_error_t *error = NULL;
@@ -33,5 +33,5 @@ kscheme_t *kdb_libxml2_load_scheme(kdb_t *db)
 		xml_path = faux_ini_find(ini, "XMLPath");
 	error = kdb_error(db);
 
-	return kxml_load_scheme(xml_path, error);
+	return kxml_load_scheme(scheme, xml_path, error);
 }

+ 2 - 2
klish/kdb.h

@@ -43,7 +43,7 @@ typedef struct kdb_s kdb_t;
 // DB plugin's entry points
 typedef bool_t (*kdb_init_fn)(kdb_t *db);
 typedef bool_t (*kdb_fini_fn)(kdb_t *db);
-typedef kscheme_t *(*kdb_load_fn)(kdb_t *db);
+typedef bool_t (*kdb_load_fn)(kdb_t *db, kscheme_t *scheme);
 typedef bool_t (*kdb_deploy_fn)(kdb_t *db, const kscheme_t *scheme);
 
 
@@ -66,7 +66,7 @@ faux_error_t *kdb_error(const kdb_t *db);
 bool_t kdb_load_plugin(kdb_t *db);
 bool_t kdb_init(kdb_t *db);
 bool_t kdb_fini(kdb_t *db);
-kscheme_t *kdb_load_scheme(kdb_t *db);
+bool_t kdb_load_scheme(kdb_t *db, kscheme_t *scheme);
 bool_t kdb_deploy_scheme(kdb_t *db, const kscheme_t *scheme);
 bool_t kdb_has_init_fn(const kdb_t *db);
 bool_t kdb_has_fini_fn(const kdb_t *db);

+ 7 - 4
klish/kscheme/kdb.c

@@ -206,15 +206,18 @@ bool_t kdb_fini(kdb_t *db)
 }
 
 
-kscheme_t *kdb_load_scheme(kdb_t *db)
+bool_t kdb_load_scheme(kdb_t *db, kscheme_t *scheme)
 {
+	assert(scheme);
+	if (!scheme)
+		return BOOL_FALSE;
 	assert(db);
 	if (!db)
-		return NULL;
+		return BOOL_FALSE;
 	if (!db->load_fn)
-		return NULL;
+		return BOOL_FALSE;
 
-	return db->load_fn(db);
+	return db->load_fn(db, scheme);
 }
 
 

+ 2 - 1
klish/kxml.h

@@ -118,7 +118,8 @@ void kxml_node_attr_free(char *str);
 
 /** @brief XML-helper
  */
-kscheme_t *kxml_load_scheme(const char *xml_path, faux_error_t *error);
+bool_t kxml_load_scheme(kscheme_t *scheme, const char *xml_path,
+	faux_error_t *error);
 
 
 #endif // _klish_kxml_h

+ 5 - 11
klish/xml-helper/load.c

@@ -157,19 +157,18 @@ static const char *default_path = "/etc/klish;~/.klish";
 static const char *path_separators = ":;";
 
 
-kscheme_t *kxml_load_scheme(const char *xml_path, faux_error_t *error)
+bool_t kxml_load_scheme(kscheme_t *scheme, const char *xml_path,
+	faux_error_t *error)
 {
-	kscheme_t *scheme = NULL;
 	const char *path = xml_path;
 	char *realpath = NULL;
 	char *fn = NULL;
 	char *saveptr = NULL;
 	bool_t ret = BOOL_TRUE;
 
-	// New kscheme instance
-	scheme = kscheme_new();
+	assert(scheme);
 	if (!scheme)
-		return NULL;
+		return BOOL_FALSE;
 
 	// Use the default path if not specified
 	if (!path)
@@ -212,16 +211,11 @@ kscheme_t *kxml_load_scheme(const char *xml_path, faux_error_t *error)
 	}
 
 	faux_str_free(realpath);
-	if (!ret) { // Some errors while XML parsing
-		kscheme_free(scheme);
-		return NULL;
-	}
 
-	return scheme;
+	return ret;
 }
 
 
-
 /** @brief Iterate through element's children.
  */
 static bool_t process_children(const kxml_node_t *element, void *parent,