diff --git a/client/tarantool/tc.c b/client/tarantool/tc.c index 7e6799ab95002040e4cb5941714d28e1a8e6e7b9..95400ba9ba42cd1bffcbfeee5a63809892ee23a7 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 800e440b3d408541d0f3a42a807b0431a8666eee..ba5c39498b2efbe397f7d9e873598da5f6c7916c 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 ba6b329c50ce69f65aafb7c0c2dc257fa078c51f..3b091e49dd4ff87627d9c98da66384382326b59a 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 4f3c38bd084650ff6f6bd83049eed3bd1ab5347a..846cd93fee704f2f8f7170fe707939864a7ee18e 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]);