Don't leak file descriptors from unavailable pack files.
[gitweb.git] / builtin-fmt-merge-msg.c
index ed59e77e1923ee8f0df050dd6851b805a26127a2..87d3d63ec71ec7f08127085330d28ed28e3f35c7 100644 (file)
@@ -111,29 +111,29 @@ static int handle_line(char *line)
        i = find_in_list(&srcs, src);
        if (i < 0) {
                i = srcs.nr;
-               append_to_list(&srcs, strdup(src),
+               append_to_list(&srcs, xstrdup(src),
                                xcalloc(1, sizeof(struct src_data)));
        }
        src_data = srcs.payload[i];
 
        if (pulling_head) {
-               origin = strdup(src);
+               origin = xstrdup(src);
                src_data->head_status |= 1;
        } else if (!strncmp(line, "branch ", 7)) {
-               origin = strdup(line + 7);
+               origin = xstrdup(line + 7);
                append_to_list(&src_data->branch, origin, NULL);
                src_data->head_status |= 2;
        } else if (!strncmp(line, "tag ", 4)) {
                origin = line;
-               append_to_list(&src_data->tag, strdup(origin + 4), NULL);
+               append_to_list(&src_data->tag, xstrdup(origin + 4), NULL);
                src_data->head_status |= 2;
        } else if (!strncmp(line, "remote branch ", 14)) {
-               origin = strdup(line + 14);
+               origin = xstrdup(line + 14);
                append_to_list(&src_data->r_branch, origin, NULL);
                src_data->head_status |= 2;
        } else {
-               origin = strdup(src);
-               append_to_list(&src_data->generic, strdup(line), NULL);
+               origin = xstrdup(src);
+               append_to_list(&src_data->generic, xstrdup(line), NULL);
                src_data->head_status |= 2;
        }
 
@@ -142,10 +142,10 @@ static int handle_line(char *line)
                if (origin[0] == '\'' && origin[len - 1] == '\'') {
                        char *new_origin = xmalloc(len - 1);
                        memcpy(new_origin, origin + 1, len - 2);
-                       new_origin[len - 1] = 0;
+                       new_origin[len - 2] = 0;
                        origin = new_origin;
                } else
-                       origin = strdup(origin);
+                       origin = xstrdup(origin);
        } else {
                char *new_origin = xmalloc(strlen(origin) + strlen(src) + 5);
                sprintf(new_origin, "%s of %s", origin, src);
@@ -203,7 +203,7 @@ static void shortlog(const char *name, unsigned char *sha1,
 
                bol = strstr(commit->buffer, "\n\n");
                if (!bol) {
-                       append_to_list(&subjects, strdup(sha1_to_hex(
+                       append_to_list(&subjects, xstrdup(sha1_to_hex(
                                                        commit->object.sha1)),
                                        NULL);
                        continue;
@@ -218,7 +218,7 @@ static void shortlog(const char *name, unsigned char *sha1,
                        memcpy(oneline, bol, len);
                        oneline[len] = 0;
                } else
-                       oneline = strdup(bol);
+                       oneline = xstrdup(bol);
                append_to_list(&subjects, oneline, NULL);
        }
 
@@ -249,7 +249,7 @@ int cmd_fmt_merge_msg(int argc, const char **argv, const char *prefix)
        FILE *in = stdin;
        const char *sep = "";
        unsigned char head_sha1[20];
-       const char *head, *current_branch;
+       const char *current_branch;
 
        git_config(fmt_merge_msg_config);
 
@@ -277,10 +277,9 @@ int cmd_fmt_merge_msg(int argc, const char **argv, const char *prefix)
                usage(fmt_merge_msg_usage);
 
        /* get current branch */
-       head = strdup(git_path("HEAD"));
-       current_branch = resolve_ref(head, head_sha1, 1);
-       current_branch += strlen(head) - 4;
-       free((char *)head);
+       current_branch = resolve_ref("HEAD", head_sha1, 1, NULL);
+       if (!current_branch)
+               die("No current branch");
        if (!strncmp(current_branch, "refs/heads/", 11))
                current_branch += 11;