Merge branch 'jc/merge-symlink' into maint
[gitweb.git] / merge-index.c
index 024196e7ac53cb9ad09b38ea646bad81aff33306..7027d7865971646f178690a150246d9bc4d674c0 100644 (file)
@@ -1,16 +1,14 @@
-#include <sys/types.h>
-#include <sys/wait.h>
-
 #include "cache.h"
 
-static const char *pgm = NULL;
+static const char *pgm;
 static const char *arguments[8];
 static int one_shot, quiet;
 static int err;
 
 static void run_program(void)
 {
-       int pid = fork(), status;
+       pid_t pid = fork();
+       int status;
 
        if (pid < 0)
                die("unable to fork");
@@ -62,7 +60,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);
@@ -99,6 +97,11 @@ int main(int argc, char **argv)
 {
        int i, force_file = 0;
 
+       /* Without this we cannot rely on waitpid() to tell
+        * what happened to our children.
+        */
+       signal(SIGCHLD, SIG_DFL);
+
        if (argc < 3)
                usage("git-merge-index [-o] [-q] <merge-program> (-a | <filename>*)");