Call mkpathdup() rather than xstrdup(mkpath(...))
authorRamsay Jones <ramsay@ramsay1.demon.co.uk>
Tue, 4 Sep 2012 17:31:14 +0000 (18:31 +0100)
committerJunio C Hamano <gitster@pobox.com>
Tue, 4 Sep 2012 20:34:46 +0000 (13:34 -0700)
In addition to updating the xstrdup(mkpath(...)) call sites with
mkpathdup(), we also fix a memory leak (in merge_3way()) caused by
neglecting to free the memory allocated to the 'base_name' variable.

Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/branch.c
builtin/clone.c
builtin/prune.c
merge-recursive.c
index 0e060f2e4a982efdda0f88d021e0a9d3f23c6b75..bdf8495aa6662456c81e5cbe2279e43da86bd342 100644 (file)
@@ -196,7 +196,7 @@ static int delete_branches(int argc, const char **argv, int force, int kinds,
 
                free(name);
 
-               name = xstrdup(mkpath(fmt, bname.buf));
+               name = mkpathdup(fmt, bname.buf);
                if (read_ref(name, sha1)) {
                        error(remote_branch
                              ? _("remote branch '%s' not found.")
index e314b0b6d2133b09307dc09fa256577e6cdba03a..c819757b3aeb1c4a011d73a0bcfee279b290e309 100644 (file)
@@ -236,7 +236,7 @@ static int add_one_reference(struct string_list_item *item, void *cb_data)
        /* Beware: real_path() and mkpath() return static buffer */
        ref_git = xstrdup(real_path(item->string));
        if (is_directory(mkpath("%s/.git/objects", ref_git))) {
-               char *ref_git_git = xstrdup(mkpath("%s/.git", ref_git));
+               char *ref_git_git = mkpathdup("%s/.git", ref_git);
                free(ref_git);
                ref_git = ref_git_git;
        } else if (!is_directory(mkpath("%s/objects", ref_git)))
@@ -700,7 +700,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
                git_dir = xstrdup(dir);
        else {
                work_tree = dir;
-               git_dir = xstrdup(mkpath("%s/.git", dir));
+               git_dir = mkpathdup("%s/.git", dir);
        }
 
        if (!option_bare) {
index b99b635e44f6145395b5c761505099c0a0f5b6cc..f66ff676eb283692304c99e77d12b325d9f4a7b3 100644 (file)
@@ -168,7 +168,7 @@ int cmd_prune(int argc, const char **argv, const char *prefix)
 
        prune_packed_objects(show_only);
        remove_temporary_files(get_object_directory());
-       s = xstrdup(mkpath("%s/pack", get_object_directory()));
+       s = mkpathdup("%s/pack", get_object_directory());
        remove_temporary_files(s);
        free(s);
        return 0;
index 39b2e165e05472daf38cd6f458541b6db4abc9a8..2f8febe0e0a64e869b33585fa43ca22b922cec8d 100644 (file)
@@ -862,14 +862,14 @@ static int merge_3way(struct merge_options *o,
        if (strcmp(a->path, b->path) ||
            (o->ancestor != NULL && strcmp(a->path, one->path) != 0)) {
                base_name = o->ancestor == NULL ? NULL :
-                       xstrdup(mkpath("%s:%s", o->ancestor, one->path));
-               name1 = xstrdup(mkpath("%s:%s", branch1, a->path));
-               name2 = xstrdup(mkpath("%s:%s", branch2, b->path));
+                       mkpathdup("%s:%s", o->ancestor, one->path);
+               name1 = mkpathdup("%s:%s", branch1, a->path);
+               name2 = mkpathdup("%s:%s", branch2, b->path);
        } else {
                base_name = o->ancestor == NULL ? NULL :
-                       xstrdup(mkpath("%s", o->ancestor));
-               name1 = xstrdup(mkpath("%s", branch1));
-               name2 = xstrdup(mkpath("%s", branch2));
+                       mkpathdup("%s", o->ancestor);
+               name1 = mkpathdup("%s", branch1);
+               name2 = mkpathdup("%s", branch2);
        }
 
        read_mmblob(&orig, one->sha1);
@@ -879,6 +879,7 @@ static int merge_3way(struct merge_options *o,
        merge_status = ll_merge(result_buf, a->path, &orig, base_name,
                                &src1, name1, &src2, name2, &ll_opts);
 
+       free(base_name);
        free(name1);
        free(name2);
        free(orig.ptr);