From 193b809592e3540e05ac34d64fd3f0c642c4722c Mon Sep 17 00:00:00 2001
From: Roman Tokarev <rtokarev@corp.mail.ru>
Date: Mon, 6 Dec 2010 15:27:46 +0300
Subject: [PATCH] [core] add --cfg_get option

---
 core/tarantool.c    | 29 +++++++++++++++++++++++++++++
 include/tarantool.h |  2 +-
 2 files changed, 30 insertions(+), 1 deletion(-)

diff --git a/core/tarantool.c b/core/tarantool.c
index 8e89ba1199..138a024e54 100644
--- a/core/tarantool.c
+++ b/core/tarantool.c
@@ -226,6 +226,7 @@ main(int argc, char **argv)
 {
 	int c, verbose = 0;
 	char *cat_filename = NULL;
+	char *cfg_paramname = NULL;
 	bool be_daemon = false;
 	int n_accepted, n_skipped;
 	FILE *f;
@@ -269,6 +270,10 @@ main(int argc, char **argv)
 		 .has_arg = 0,
 		 .flag = NULL,
 		 .val = 'D'},
+		{.name = "cfg_get",
+		 .has_arg = 1,
+		 .flag = NULL,
+		 .val = 'g'},
 		{.name = NULL,
 		 .has_arg = 0,
 		 .flag = NULL,
@@ -302,6 +307,10 @@ main(int argc, char **argv)
 		case 'I':
 			init_storage = true;
 			break;
+		case 'g':
+			role = cfg_get;
+			cfg_paramname = strdup(optarg);
+			break;
 		}
 	}
 
@@ -319,6 +328,7 @@ main(int argc, char **argv)
 		fprintf(stderr, "	-p, --create_pid\n");
 		fprintf(stderr, "	-v, --verbose\n");
 		fprintf(stderr, "	-D, --daemonize\n");
+		fprintf(stderr, "	--cfg_get=paramname\n");
 
 		return 0;
 	}
@@ -355,6 +365,25 @@ main(int argc, char **argv)
 	}
 #endif
 
+	if (role == cfg_get) {
+		tarantool_cfg_iterator_t *i;
+		char *key, *value;
+
+		i = tarantool_cfg_iterator_init();
+		while ((key = tarantool_cfg_iterator_next(i, &cfg, &value)) != NULL) {
+			if (strcmp(key, cfg_paramname) == 0) {
+				printf("%s\n", value);
+				free(value);
+
+				return 0;
+			}
+
+			free(value);
+		}
+
+		return 0;
+	}
+
 	cfg.log_level += verbose;
 
 	if (cfg.work_dir != NULL && chdir(cfg.work_dir) == -1)
diff --git a/include/tarantool.h b/include/tarantool.h
index ff8600b240..a308f3e150 100644
--- a/include/tarantool.h
+++ b/include/tarantool.h
@@ -51,7 +51,7 @@ double tarantool_uptime(void);
 char **init_set_proc_title(int argc, char **argv);
 void set_proc_title(const char *format, ...);
 
-enum tarantool_role { usage, cat, def };
+enum tarantool_role { usage, cat, def, cfg_get };
 extern enum tarantool_role role;
 
 #endif
-- 
GitLab