X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=merge-index.c;h=5599fd321bb4c09c1c0ce4fc62dfb9ecf5531c2b;hb=851c603e9ca9d0954d89be1532d924a28ccb79fa;hp=a9983dd78ad5cd1e364f0e00c259bdb7e6f151f0;hpb=37818d7db070f67a20df58ac7d5e04cc63ef1867;p=git.git diff --git a/merge-index.c b/merge-index.c index a9983dd78..5599fd321 100644 --- a/merge-index.c +++ b/merge-index.c @@ -1,30 +1,17 @@ #include "cache.h" +#include "run-command.h" static const char *pgm; -static const char *arguments[8]; +static const char *arguments[9]; static int one_shot, quiet; static int err; static void run_program(void) { - pid_t pid = fork(); - int status; - - if (pid < 0) - die("unable to fork"); - if (!pid) { - execlp(pgm, arguments[0], - arguments[1], - arguments[2], - arguments[3], - arguments[4], - arguments[5], - arguments[6], - arguments[7], - NULL); - die("unable to execute '%s'", pgm); - } - if (waitpid(pid, &status, 0) < 0 || !WIFEXITED(status) || WEXITSTATUS(status)) { + struct child_process child; + memset(&child, 0, sizeof(child)); + child.argv = arguments; + if (run_command(&child)) { if (one_shot) { err++; } else { @@ -49,6 +36,7 @@ static int merge_entry(int pos, const char *path) arguments[5] = ""; arguments[6] = ""; arguments[7] = ""; + arguments[8] = NULL; found = 0; do { static char hexbuf[4][60]; @@ -60,7 +48,7 @@ static int merge_entry(int pos, const char *path) break; found++; strcpy(hexbuf[stage], sha1_to_hex(ce->sha1)); - sprintf(ownbuf[stage], "%o", ntohl(ce->ce_mode) & (~S_IFMT)); + sprintf(ownbuf[stage], "%o", ntohl(ce->ce_mode)); arguments[stage] = hexbuf[stage]; arguments[stage + 4] = ownbuf[stage]; } while (++pos < active_nr);