Add ability to specify environment extension to run_command
authorAlex Riesen <raa.lkml@gmail.com>
Tue, 22 May 2007 21:48:47 +0000 (23:48 +0200)
committerJunio C Hamano <junkio@cox.net>
Thu, 24 May 2007 05:38:44 +0000 (22:38 -0700)
There is no way to specify and override for the environment:
there'd be no user for it yet.

Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
run-command.c
run-command.h

index 043b5701a1bb888b5b4fce9299b9dc28c176d09e..4ee4bdf16c1c5288d63ed0ba9a4503d04377c19e 100644 (file)
@@ -76,6 +76,10 @@ int start_command(struct child_process *cmd)
                if (cmd->dir && chdir(cmd->dir))
                        die("exec %s: cd to %s failed (%s)", cmd->argv[0],
                            cmd->dir, strerror(errno));
+               if (cmd->env) {
+                       for (; *cmd->env; cmd->env++)
+                               putenv((char*)*cmd->env);
+               }
                if (cmd->git_cmd) {
                        execv_git_cmd(cmd->argv);
                } else {
@@ -137,7 +141,8 @@ int run_command(struct child_process *cmd)
 }
 
 static void prepare_run_command_v_opt(struct child_process *cmd,
-                                     const char **argv, int opt)
+                                     const char **argv,
+                                     int opt)
 {
        memset(cmd, 0, sizeof(*cmd));
        cmd->argv = argv;
@@ -160,3 +165,12 @@ int run_command_v_opt_cd(const char **argv, int opt, const char *dir)
        cmd.dir = dir;
        return run_command(&cmd);
 }
+
+int run_command_v_opt_cd_env(const char **argv, int opt, const char *dir, const char *const *env)
+{
+       struct child_process cmd;
+       prepare_run_command_v_opt(&cmd, argv, opt);
+       cmd.dir = dir;
+       cmd.env = env;
+       return run_command(&cmd);
+}
index cbd7484a00387ad039f4b713469a0663ab7c0a69..af1e0bf1789f13cd14e189b1042e8e1cbe2c2dca 100644 (file)
@@ -17,6 +17,7 @@ struct child_process {
        int in;
        int out;
        const char *dir;
+       const char *const *env;
        unsigned close_in:1;
        unsigned close_out:1;
        unsigned no_stdin:1;
@@ -34,5 +35,6 @@ int run_command(struct child_process *);
 #define RUN_COMMAND_STDOUT_TO_STDERR 4
 int run_command_v_opt(const char **argv, int opt);
 int run_command_v_opt_cd(const char **argv, int opt, const char *dir);
+int run_command_v_opt_cd_env(const char **argv, int opt, const char *dir, const char *const *env);
 
 #endif