Merge branch 'jk/pager-swap'
authorJunio C Hamano <gitster@pobox.com>
Wed, 20 Aug 2008 04:42:55 +0000 (21:42 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 20 Aug 2008 04:42:55 +0000 (21:42 -0700)
* jk/pager-swap:
spawn pager via run_command interface
run-command: add pre-exec callback

1  2 
run-command.c
diff --combined run-command.c
index bbb9c777e583c345d25a6651f9ddf7725c10f6af,73d0c312767191a2150b5223806c1733533bc5c2..caab374577e02e9a33cd8095b8da9234acb065f8
@@@ -68,7 -68,6 +68,7 @@@ int start_command(struct child_process 
        trace_argv_printf(cmd->argv, "trace: run_command:");
  
  #ifndef __MINGW32__
 +      fflush(NULL);
        cmd->pid = fork();
        if (!cmd->pid) {
                if (cmd->no_stdin)
                                        unsetenv(*cmd->env);
                        }
                }
+               if (cmd->preexec_cb)
+                       cmd->preexec_cb();
                if (cmd->git_cmd) {
                        execv_git_cmd(cmd->argv);
                } else {
        }
  #else
        int s0 = -1, s1 = -1, s2 = -1;  /* backups of stdin, stdout, stderr */
 -      const char *sargv0 = cmd->argv[0];
 +      const char **sargv = cmd->argv;
        char **env = environ;
 -      struct strbuf git_cmd;
  
        if (cmd->no_stdin) {
                s0 = dup(0);
        }
  
        if (cmd->git_cmd) {
 -              strbuf_init(&git_cmd, 0);
 -              strbuf_addf(&git_cmd, "git-%s", cmd->argv[0]);
 -              cmd->argv[0] = git_cmd.buf;
 +              cmd->argv = prepare_git_cmd(cmd->argv);
        }
  
        cmd->pid = mingw_spawnvpe(cmd->argv[0], cmd->argv, env);
        if (cmd->env)
                free_environ(env);
        if (cmd->git_cmd)
 -              strbuf_release(&git_cmd);
 +              free(cmd->argv);
  
 -      cmd->argv[0] = sargv0;
 +      cmd->argv = sargv;
        if (s0 >= 0)
                dup2(s0, 0), close(s0);
        if (s1 >= 0)
@@@ -305,9 -309,6 +307,9 @@@ int start_async(struct async *async
        async->out = pipe_out[0];
  
  #ifndef __MINGW32__
 +      /* Flush stdio before fork() to avoid cloning buffers */
 +      fflush(NULL);
 +
        async->pid = fork();
        if (async->pid < 0) {
                error("fork (async) failed: %s", strerror(errno));