提交 a9154590 编写于 作者: R René Scharfe 提交者: Junio C Hamano

use env_array member of struct child_process

Convert users of struct child_process to using the managed env_array for
specifying environment variables instead of supplying an array on the
stack or bringing their own argv_array.  This shortens and simplifies
the code and ensures automatically that the allocated memory is freed
after use.
Signed-off-by: NRene Scharfe <l.s.r@web.de>
Signed-off-by: NJunio C Hamano <gitster@pobox.com>
上级 19a583dc
...@@ -453,7 +453,6 @@ static const char *check_nonce(const char *buf, size_t len) ...@@ -453,7 +453,6 @@ static const char *check_nonce(const char *buf, size_t len)
static void prepare_push_cert_sha1(struct child_process *proc) static void prepare_push_cert_sha1(struct child_process *proc)
{ {
static int already_done; static int already_done;
struct argv_array env = ARGV_ARRAY_INIT;
if (!push_cert.len) if (!push_cert.len)
return; return;
...@@ -487,20 +486,26 @@ static void prepare_push_cert_sha1(struct child_process *proc) ...@@ -487,20 +486,26 @@ static void prepare_push_cert_sha1(struct child_process *proc)
nonce_status = check_nonce(push_cert.buf, bogs); nonce_status = check_nonce(push_cert.buf, bogs);
} }
if (!is_null_sha1(push_cert_sha1)) { if (!is_null_sha1(push_cert_sha1)) {
argv_array_pushf(&env, "GIT_PUSH_CERT=%s", sha1_to_hex(push_cert_sha1)); argv_array_pushf(&proc->env_array, "GIT_PUSH_CERT=%s",
argv_array_pushf(&env, "GIT_PUSH_CERT_SIGNER=%s", sha1_to_hex(push_cert_sha1));
argv_array_pushf(&proc->env_array, "GIT_PUSH_CERT_SIGNER=%s",
sigcheck.signer ? sigcheck.signer : ""); sigcheck.signer ? sigcheck.signer : "");
argv_array_pushf(&env, "GIT_PUSH_CERT_KEY=%s", argv_array_pushf(&proc->env_array, "GIT_PUSH_CERT_KEY=%s",
sigcheck.key ? sigcheck.key : ""); sigcheck.key ? sigcheck.key : "");
argv_array_pushf(&env, "GIT_PUSH_CERT_STATUS=%c", sigcheck.result); argv_array_pushf(&proc->env_array, "GIT_PUSH_CERT_STATUS=%c",
sigcheck.result);
if (push_cert_nonce) { if (push_cert_nonce) {
argv_array_pushf(&env, "GIT_PUSH_CERT_NONCE=%s", push_cert_nonce); argv_array_pushf(&proc->env_array,
argv_array_pushf(&env, "GIT_PUSH_CERT_NONCE_STATUS=%s", nonce_status); "GIT_PUSH_CERT_NONCE=%s",
push_cert_nonce);
argv_array_pushf(&proc->env_array,
"GIT_PUSH_CERT_NONCE_STATUS=%s",
nonce_status);
if (nonce_status == NONCE_SLOP) if (nonce_status == NONCE_SLOP)
argv_array_pushf(&env, "GIT_PUSH_CERT_NONCE_SLOP=%ld", argv_array_pushf(&proc->env_array,
"GIT_PUSH_CERT_NONCE_SLOP=%ld",
nonce_stamp_slop); nonce_stamp_slop);
} }
proc->env = env.argv;
} }
} }
......
...@@ -314,7 +314,6 @@ static void run_service(const char **argv) ...@@ -314,7 +314,6 @@ static void run_service(const char **argv)
const char *encoding = getenv("HTTP_CONTENT_ENCODING"); const char *encoding = getenv("HTTP_CONTENT_ENCODING");
const char *user = getenv("REMOTE_USER"); const char *user = getenv("REMOTE_USER");
const char *host = getenv("REMOTE_ADDR"); const char *host = getenv("REMOTE_ADDR");
struct argv_array env = ARGV_ARRAY_INIT;
int gzipped_request = 0; int gzipped_request = 0;
struct child_process cld = CHILD_PROCESS_INIT; struct child_process cld = CHILD_PROCESS_INIT;
...@@ -329,13 +328,12 @@ static void run_service(const char **argv) ...@@ -329,13 +328,12 @@ static void run_service(const char **argv)
host = "(none)"; host = "(none)";
if (!getenv("GIT_COMMITTER_NAME")) if (!getenv("GIT_COMMITTER_NAME"))
argv_array_pushf(&env, "GIT_COMMITTER_NAME=%s", user); argv_array_pushf(&cld.env_array, "GIT_COMMITTER_NAME=%s", user);
if (!getenv("GIT_COMMITTER_EMAIL")) if (!getenv("GIT_COMMITTER_EMAIL"))
argv_array_pushf(&env, "GIT_COMMITTER_EMAIL=%s@http.%s", argv_array_pushf(&cld.env_array,
user, host); "GIT_COMMITTER_EMAIL=%s@http.%s", user, host);
cld.argv = argv; cld.argv = argv;
cld.env = env.argv;
if (gzipped_request) if (gzipped_request)
cld.in = -1; cld.in = -1;
cld.git_cmd = 1; cld.git_cmd = 1;
...@@ -350,7 +348,6 @@ static void run_service(const char **argv) ...@@ -350,7 +348,6 @@ static void run_service(const char **argv)
if (finish_command(&cld)) if (finish_command(&cld))
exit(1); exit(1);
argv_array_clear(&env);
} }
static int show_text_ref(const char *name, const unsigned char *sha1, static int show_text_ref(const char *name, const unsigned char *sha1,
......
...@@ -74,17 +74,10 @@ void setup_pager(void) ...@@ -74,17 +74,10 @@ void setup_pager(void)
pager_process.use_shell = 1; pager_process.use_shell = 1;
pager_process.argv = pager_argv; pager_process.argv = pager_argv;
pager_process.in = -1; pager_process.in = -1;
if (!getenv("LESS") || !getenv("LV")) { if (!getenv("LESS"))
static const char *env[3]; argv_array_push(&pager_process.env_array, "LESS=FRX");
int i = 0; if (!getenv("LV"))
argv_array_push(&pager_process.env_array, "LV=-c");
if (!getenv("LESS"))
env[i++] = "LESS=FRX";
if (!getenv("LV"))
env[i++] = "LV=-c";
env[i] = NULL;
pager_process.env = env;
}
if (start_command(&pager_process)) if (start_command(&pager_process))
return; return;
......
...@@ -108,12 +108,6 @@ static struct child_process *get_helper(struct transport *transport) ...@@ -108,12 +108,6 @@ static struct child_process *get_helper(struct transport *transport)
int refspec_alloc = 0; int refspec_alloc = 0;
int duped; int duped;
int code; int code;
char git_dir_buf[sizeof(GIT_DIR_ENVIRONMENT) + PATH_MAX + 1];
const char *helper_env[] = {
git_dir_buf,
NULL
};
if (data->helper) if (data->helper)
return data->helper; return data->helper;
...@@ -129,8 +123,8 @@ static struct child_process *get_helper(struct transport *transport) ...@@ -129,8 +123,8 @@ static struct child_process *get_helper(struct transport *transport)
helper->git_cmd = 0; helper->git_cmd = 0;
helper->silent_exec_failure = 1; helper->silent_exec_failure = 1;
snprintf(git_dir_buf, sizeof(git_dir_buf), "%s=%s", GIT_DIR_ENVIRONMENT, get_git_dir()); argv_array_pushf(&helper->env_array, "%s=%s", GIT_DIR_ENVIRONMENT,
helper->env = helper_env; get_git_dir());
code = start_command(helper); code = start_command(helper);
if (code < 0 && errno == ENOENT) if (code < 0 && errno == ENOENT)
......
...@@ -726,14 +726,14 @@ static void wt_status_print_changed(struct wt_status *s) ...@@ -726,14 +726,14 @@ static void wt_status_print_changed(struct wt_status *s)
static void wt_status_print_submodule_summary(struct wt_status *s, int uncommitted) static void wt_status_print_submodule_summary(struct wt_status *s, int uncommitted)
{ {
struct child_process sm_summary = CHILD_PROCESS_INIT; struct child_process sm_summary = CHILD_PROCESS_INIT;
struct argv_array env = ARGV_ARRAY_INIT;
struct argv_array argv = ARGV_ARRAY_INIT; struct argv_array argv = ARGV_ARRAY_INIT;
struct strbuf cmd_stdout = STRBUF_INIT; struct strbuf cmd_stdout = STRBUF_INIT;
struct strbuf summary = STRBUF_INIT; struct strbuf summary = STRBUF_INIT;
char *summary_content; char *summary_content;
size_t len; size_t len;
argv_array_pushf(&env, "GIT_INDEX_FILE=%s", s->index_file); argv_array_pushf(&sm_summary.env_array, "GIT_INDEX_FILE=%s",
s->index_file);
argv_array_push(&argv, "submodule"); argv_array_push(&argv, "submodule");
argv_array_push(&argv, "summary"); argv_array_push(&argv, "summary");
...@@ -745,14 +745,12 @@ static void wt_status_print_submodule_summary(struct wt_status *s, int uncommitt ...@@ -745,14 +745,12 @@ static void wt_status_print_submodule_summary(struct wt_status *s, int uncommitt
argv_array_push(&argv, s->amend ? "HEAD^" : "HEAD"); argv_array_push(&argv, s->amend ? "HEAD^" : "HEAD");
sm_summary.argv = argv.argv; sm_summary.argv = argv.argv;
sm_summary.env = env.argv;
sm_summary.git_cmd = 1; sm_summary.git_cmd = 1;
sm_summary.no_stdin = 1; sm_summary.no_stdin = 1;
fflush(s->fp); fflush(s->fp);
sm_summary.out = -1; sm_summary.out = -1;
run_command(&sm_summary); run_command(&sm_summary);
argv_array_clear(&env);
argv_array_clear(&argv); argv_array_clear(&argv);
len = strbuf_read(&cmd_stdout, sm_summary.out, 1024); len = strbuf_read(&cmd_stdout, sm_summary.out, 1024);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册