{"thread":{"id":"31433","subject":"[PATCH 5/5] Call mkpathdup() rather than xstrdup(mkpath(...))","startedAt":"2012-09-04T17:31:14Z","lastAt":"2012-09-04T17:31:14Z","messageCount":1,"participants":["Ramsay Jones"],"isPatch":true,"patchVersion":1,"patchTotal":5},"messages":[{"id":"198330","messageId":"50463AE2.3010604@ramsay1.demon.co.uk","threadId":"31433","inReplyTo":null,"subject":"[PATCH 5/5] Call mkpathdup() rather than xstrdup(mkpath(...))","fromName":"Ramsay Jones","fromEmail":"ramsay@ramsay1.demon.co.uk","sentAt":"2012-09-04T17:31:14Z","receivedAt":"2012-09-04T17:31:14Z","isPatch":true,"sender":{"key":"ramsay@ramsayjones.plus.com","avatar":"https://avatars.githubusercontent.com/u/33702710?v=4"},"body":"\nIn addition to updating the xstrdup(mkpath(...)) call sites with\nmkpathdup(), we also fix a memory leak (in merge_3way()) caused by\nneglecting to free the memory allocated to the 'base_name' variable.\n\nSigned-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>\n---\n builtin/branch.c  |  2 +-\n builtin/clone.c   |  4 ++--\n builtin/prune.c   |  2 +-\n merge-recursive.c | 13 +++++++------\n 4 files changed, 11 insertions(+), 10 deletions(-)\n\ndiff --git a/builtin/branch.c b/builtin/branch.c\nindex 0e060f2..bdf8495 100644\n--- a/builtin/branch.c\n+++ b/builtin/branch.c\n@@ -196,7 +196,7 @@ static int delete_branches(int argc, const char **argv, int force, int kinds,\n \n \t\tfree(name);\n \n-\t\tname = xstrdup(mkpath(fmt, bname.buf));\n+\t\tname = mkpathdup(fmt, bname.buf);\n \t\tif (read_ref(name, sha1)) {\n \t\t\terror(remote_branch\n \t\t\t      ? _(\"remote branch '%s' not found.\")\ndiff --git a/builtin/clone.c b/builtin/clone.c\nindex e314b0b..c819757 100644\n--- a/builtin/clone.c\n+++ b/builtin/clone.c\n@@ -236,7 +236,7 @@ static int add_one_reference(struct string_list_item *item, void *cb_data)\n \t/* Beware: real_path() and mkpath() return static buffer */\n \tref_git = xstrdup(real_path(item->string));\n \tif (is_directory(mkpath(\"%s/.git/objects\", ref_git))) {\n-\t\tchar *ref_git_git = xstrdup(mkpath(\"%s/.git\", ref_git));\n+\t\tchar *ref_git_git = mkpathdup(\"%s/.git\", ref_git);\n \t\tfree(ref_git);\n \t\tref_git = ref_git_git;\n \t} else if (!is_directory(mkpath(\"%s/objects\", ref_git)))\n@@ -700,7 +700,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)\n \t\tgit_dir = xstrdup(dir);\n \telse {\n \t\twork_tree = dir;\n-\t\tgit_dir = xstrdup(mkpath(\"%s/.git\", dir));\n+\t\tgit_dir = mkpathdup(\"%s/.git\", dir);\n \t}\n \n \tif (!option_bare) {\ndiff --git a/builtin/prune.c b/builtin/prune.c\nindex 6cb9944..685f8a0 100644\n--- a/builtin/prune.c\n+++ b/builtin/prune.c\n@@ -169,7 +169,7 @@ int cmd_prune(int argc, const char **argv, const char *prefix)\n \n \tprune_packed_objects(show_only);\n \tremove_temporary_files(get_object_directory());\n-\ts = xstrdup(mkpath(\"%s/pack\", get_object_directory()));\n+\ts = mkpathdup(\"%s/pack\", get_object_directory());\n \tremove_temporary_files(s);\n \tfree(s);\n \treturn 0;\ndiff --git a/merge-recursive.c b/merge-recursive.c\nindex 7866ca1..d882060 100644\n--- a/merge-recursive.c\n+++ b/merge-recursive.c\n@@ -844,14 +844,14 @@ static int merge_3way(struct merge_options *o,\n \tif (strcmp(a->path, b->path) ||\n \t    (o->ancestor != NULL && strcmp(a->path, one->path) != 0)) {\n \t\tbase_name = o->ancestor == NULL ? NULL :\n-\t\t\txstrdup(mkpath(\"%s:%s\", o->ancestor, one->path));\n-\t\tname1 = xstrdup(mkpath(\"%s:%s\", branch1, a->path));\n-\t\tname2 = xstrdup(mkpath(\"%s:%s\", branch2, b->path));\n+\t\t\tmkpathdup(\"%s:%s\", o->ancestor, one->path);\n+\t\tname1 = mkpathdup(\"%s:%s\", branch1, a->path);\n+\t\tname2 = mkpathdup(\"%s:%s\", branch2, b->path);\n \t} else {\n \t\tbase_name = o->ancestor == NULL ? NULL :\n-\t\t\txstrdup(mkpath(\"%s\", o->ancestor));\n-\t\tname1 = xstrdup(mkpath(\"%s\", branch1));\n-\t\tname2 = xstrdup(mkpath(\"%s\", branch2));\n+\t\t\tmkpathdup(\"%s\", o->ancestor);\n+\t\tname1 = mkpathdup(\"%s\", branch1);\n+\t\tname2 = mkpathdup(\"%s\", branch2);\n \t}\n \n \tread_mmblob(&orig, one->sha1);\n@@ -861,6 +861,7 @@ static int merge_3way(struct merge_options *o,\n \tmerge_status = ll_merge(result_buf, a->path, &orig, base_name,\n \t\t\t\t&src1, name1, &src2, name2, &ll_opts);\n \n+\tfree(base_name);\n \tfree(name1);\n \tfree(name2);\n \tfree(orig.ptr);\n-- \n1.7.12\n"}]}