summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--builtin/apply.c33
1 files changed, 19 insertions, 14 deletions
diff --git a/builtin/apply.c b/builtin/apply.c
index 427c2634d7..aff1d9f75d 100644
--- a/builtin/apply.c
+++ b/builtin/apply.c
@@ -198,19 +198,24 @@ struct patch {
static void free_patch(struct patch *patch)
{
- while (patch) {
- struct patch *patch_next = patch->next;
- struct fragment *fragment = patch->fragments;
-
- while (fragment) {
- struct fragment *fragment_next = fragment->next;
- if (fragment->patch != NULL && fragment->free_patch)
- free((char *)fragment->patch);
- free(fragment);
- fragment = fragment_next;
- }
- free(patch);
- patch = patch_next;
+ struct fragment *fragment = patch->fragments;
+
+ while (fragment) {
+ struct fragment *fragment_next = fragment->next;
+ if (fragment->patch != NULL && fragment->free_patch)
+ free((char *)fragment->patch);
+ free(fragment);
+ fragment = fragment_next;
+ }
+ free(patch);
+}
+
+static void free_patch_list(struct patch *list)
+{
+ while (list) {
+ struct patch *next = list->next;
+ free_patch(list);
+ list = next;
}
}
@@ -3771,7 +3776,7 @@ static int apply_patch(int fd, const char *filename, int options)
if (summary)
summary_patch_list(list);
- free_patch(list);
+ free_patch_list(list);
strbuf_release(&buf);
return 0;
}