[lvm-devel] master - refactor: factor out common part of the code to open and read config files

Peter Rajnoha prajnoha at fedoraproject.org
Tue Jul 2 13:32:24 UTC 2013


Gitweb:        http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=2d784753c08b24e02ea0e6c1423342b355037d86
Commit:        2d784753c08b24e02ea0e6c1423342b355037d86
Parent:        b31725d0ae0539f2d13a2454849de557fe91c4fb
Author:        Peter Rajnoha <prajnoha at redhat.com>
AuthorDate:    Tue Jun 25 12:25:23 2013 +0200
Committer:     Peter Rajnoha <prajnoha at redhat.com>
CommitterDate: Tue Jul 2 15:19:08 2013 +0200

refactor: factor out common part of the code to open and read config files

---
 lib/commands/toolcontext.c |   26 ++------------------------
 lib/config/config.c        |   30 ++++++++++++++++++++++++++++++
 lib/config/config.h        |    1 +
 3 files changed, 33 insertions(+), 24 deletions(-)

diff --git a/lib/commands/toolcontext.c b/lib/commands/toolcontext.c
index 79c25a5..c7b2451 100644
--- a/lib/commands/toolcontext.c
+++ b/lib/commands/toolcontext.c
@@ -532,7 +532,6 @@ static int _load_config_file(struct cmd_context *cmd, const char *tag)
 {
 	static char config_file[PATH_MAX] = "";
 	const char *filler = "";
-	struct stat info;
 	struct config_tree_list *cfl;
 
 	if (*tag)
@@ -549,32 +548,11 @@ static int _load_config_file(struct cmd_context *cmd, const char *tag)
 		return 0;
 	}
 
-	if (!(cfl->cft = config_file_open(config_file, 0))) {
-		log_error("config_tree allocation failed");
-		return 0;
-	}
-
-	/* Is there a config file? */
-	if (stat(config_file, &info) == -1) {
-		if (errno == ENOENT) {
-			dm_list_add(&cmd->config_files, &cfl->list);
-			goto out;
-		}
-		log_sys_error("stat", config_file);
-		config_file_destroy(cfl->cft);
-		return 0;
-	}
-
-	log_very_verbose("Loading config file: %s", config_file);
-	if (!config_file_read(cfl->cft)) {
-		log_error("Failed to load config file %s", config_file);
-		config_file_destroy(cfl->cft);
-		return 0;
-	}
+	if (!(cfl->cft = config_file_open_and_read(config_file)))
+		return_0;
 
 	dm_list_add(&cmd->config_files, &cfl->list);
 
-      out:
 	if (*tag) {
 		if (!_init_tags(cmd, cfl->cft))
 			return_0;
diff --git a/lib/config/config.c b/lib/config/config.c
index 7b6ac7b..aec1588 100644
--- a/lib/config/config.c
+++ b/lib/config/config.c
@@ -170,6 +170,36 @@ void config_file_destroy(struct dm_config_tree *cft)
 	dm_config_destroy(cft);
 }
 
+struct dm_config_tree *config_file_open_and_read(const char *config_file)
+{
+	struct dm_config_tree *cft;
+	struct stat info;
+
+	if (!(cft = config_file_open(config_file, 0))) {
+		log_error("config_tree allocation failed");
+		return NULL;
+	}
+
+	/* Is there a config file? */
+	if (stat(config_file, &info) == -1) {
+		if (errno == ENOENT)
+			return cft;
+		log_sys_error("stat", config_file);
+		goto bad;
+	}
+
+	log_very_verbose("Loading config file: %s", config_file);
+	if (!config_file_read(cft)) {
+		log_error("Failed to load config file %s", config_file);
+		goto bad;
+	}
+
+	return cft;
+bad:
+	config_file_destroy(cft);
+	return NULL;
+}
+
 /*
  * Returns config tree if it was removed.
  */
diff --git a/lib/config/config.h b/lib/config/config.h
index 155d69a..0403924 100644
--- a/lib/config/config.h
+++ b/lib/config/config.h
@@ -120,6 +120,7 @@ int config_file_read_fd(struct dm_config_tree *cft, struct device *dev,
 			off_t offset, size_t size, off_t offset2, size_t size2,
 			checksum_fn_t checksum_fn, uint32_t checksum);
 int config_file_read(struct dm_config_tree *cft);
+struct dm_config_tree *config_file_open_and_read(const char *config_file);
 int config_write(struct dm_config_tree *cft,
 		 int withcomment, int withversion,
 		 const char *file, int argc, char **argv);




More information about the lvm-devel mailing list