From b4818ec5e1992eeaf6e626918e996006bddd8515 Mon Sep 17 00:00:00 2001 From: Eugine Blikh <bigbes@gmail.com> Date: Thu, 21 Nov 2013 12:44:50 +0400 Subject: [PATCH] Add support for environmental variables --- client/tarantool/tc.c | 4 ++-- client/tarantool/tc_opt.c | 3 ++- client/tarantool/tc_opt.h | 3 ++- client/tarantool/tc_pager.c | 7 ++----- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/client/tarantool/tc.c b/client/tarantool/tc.c index 7e6799ab95..95400ba9ba 100644 --- a/client/tarantool/tc.c +++ b/client/tarantool/tc.c @@ -140,12 +140,12 @@ static void tc_validate(void) tc.opt.raw = 1; } -int main(int argc, char *argv[]) +int main(int argc, char *argv[], char *envp[]) { tc_init(); int rc = 0; - enum tc_opt_mode mode = tc_opt_init(&tc.opt, argc, argv); + enum tc_opt_mode mode = tc_opt_init(&tc.opt, argc, argv, envp); tc_validate(); switch (mode) { case TC_OPT_USAGE: diff --git a/client/tarantool/tc_opt.c b/client/tarantool/tc_opt.c index 800e440b3d..ba5c39498b 100644 --- a/client/tarantool/tc_opt.c +++ b/client/tarantool/tc_opt.c @@ -93,7 +93,7 @@ void tc_opt_version(void) exit(0); } -enum tc_opt_mode tc_opt_init(struct tc_opt *opt, int argc, char **argv) +enum tc_opt_mode tc_opt_init(struct tc_opt *opt, int argc, char **argv, char **envp) { /* usage */ void *tc_options = gopt_sort(&argc, (const char**)argv, tc_options_def); @@ -197,6 +197,7 @@ enum tc_opt_mode tc_opt_init(struct tc_opt *opt, int argc, char **argv) opt->mode = TC_OPT_INTERACTIVE; } opt->pager = NULL; + opt->envp = envp; done: gopt_free(tc_options); return opt->mode; diff --git a/client/tarantool/tc_opt.h b/client/tarantool/tc_opt.h index ba6b329c50..3b091e49dd 100644 --- a/client/tarantool/tc_opt.h +++ b/client/tarantool/tc_opt.h @@ -63,6 +63,7 @@ struct tc_opt { const char *file; char **cmdv; int cmdc; + char **envp; const char *delim; size_t delim_len; const char *pager; @@ -72,6 +73,6 @@ void tc_opt_usage(void); void tc_opt_version(void); enum tc_opt_mode -tc_opt_init(struct tc_opt *opt, int argc, char **argv); +tc_opt_init(struct tc_opt *opt, int argc, char **argv, char **envp); #endif /* TC_OPT_H_INCLUDED */ diff --git a/client/tarantool/tc_pager.c b/client/tarantool/tc_pager.c index 4f3c38bd08..846cd93fee 100644 --- a/client/tarantool/tc_pager.c +++ b/client/tarantool/tc_pager.c @@ -20,11 +20,8 @@ void tc_pager_start() { tc.pager_fd = fileno(stdout); return; } - char cmd[] = {"/bin/bash"}; - char args[] = {"-c"}; int pipefd[2]; - const char *const argv[] = {cmd, args, tc.opt.pager, NULL}; - + const char *const argv[] = {"/bin/bash", "-c", tc.opt.pager, NULL}; if (pipe(pipefd) < 0) tc_error("Failed to open pipe. Errno: %d", errno); @@ -34,7 +31,7 @@ void tc_pager_start() { if (pid == 0) { close(pipefd[1]); dup2(pipefd[0], STDIN_FILENO); - execve(argv[0], (char * const*)argv, NULL); + execve(argv[0], (char * const*)argv, (char * const*)tc.opt.envp); tc_error("Can't start pager! Errno: %d", errno); } close(pipefd[0]); -- GitLab