Fix random segfaults in pack-objects.
[gitweb.git] / merge-tree.c
index 7cf00be6d51b17ca60979a9c856e67405906d9a7..692ede0e3db7df66b2e5943dc58224f34c59fd8c 100644 (file)
@@ -152,7 +152,7 @@ static int same_entry(struct name_entry *a, struct name_entry *b)
 {
        return  a->sha1 &&
                b->sha1 &&
-               !memcmp(a->sha1, b->sha1, 20) &&
+               !hashcmp(a->sha1, b->sha1) &&
                a->mode == b->mode;
 }
 
@@ -177,7 +177,7 @@ static void resolve(const char *base, struct name_entry *branch1, struct name_en
        if (!branch1)
                return;
 
-       path = strdup(mkpath("%s%s", base, result->path));
+       path = xstrdup(mkpath("%s%s", base, result->path));
        orig = create_entry(2, branch1->mode, branch1->sha1, path);
        final = create_entry(0, result->mode, result->sha1, path);
 
@@ -233,7 +233,7 @@ static struct merge_list *link_entry(unsigned stage, const char *base, struct na
        if (entry)
                path = entry->path;
        else
-               path = strdup(mkpath("%s%s", base, n->path));
+               path = xstrdup(mkpath("%s%s", base, n->path));
        link = create_entry(stage, n->mode, n->sha1, path);
        link->link = entry;
        return link;
@@ -337,9 +337,11 @@ int main(int argc, char **argv)
        struct tree_desc t[3];
        void *buf1, *buf2, *buf3;
 
-       if (argc < 4)
+       if (argc != 4)
                usage(merge_tree_usage);
 
+       setup_git_directory();
+
        buf1 = get_tree_descriptor(t+0, argv[1]);
        buf2 = get_tree_descriptor(t+1, argv[2]);
        buf3 = get_tree_descriptor(t+2, argv[3]);