Merge branch 'cc/apply'
authorJunio C Hamano <gitster@pobox.com>
Wed, 13 Apr 2016 21:12:34 +0000 (14:12 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 13 Apr 2016 21:12:34 +0000 (14:12 -0700)
Minor code clean-up.

* cc/apply:
builtin/apply: free patch when parse_chunk() fails
builtin/apply: handle parse_binary() failure
apply: remove unused call to free() in gitdiff_{old,new}name()
builtin/apply: get rid of useless 'name' variable

1  2 
builtin/apply.c
diff --combined builtin/apply.c
index c993333f9f6bd397d32c8cdc299100930a37de24,ce3b77853c7a409b40d14400172327978266f9ca..8e4da2e1bdaf02590289f54750a9602281f4a365
@@@ -931,22 -931,19 +931,19 @@@ static char *gitdiff_verify_name(const 
                return find_name(line, NULL, p_value, TERM_TAB);
  
        if (orig_name) {
-               int len;
-               const char *name;
+               int len = strlen(orig_name);
                char *another;
-               name = orig_name;
-               len = strlen(name);
                if (isnull)
-                       die(_("git apply: bad git-diff - expected /dev/null, got %s on line %d"), name, linenr);
+                       die(_("git apply: bad git-diff - expected /dev/null, got %s on line %d"),
+                           orig_name, linenr);
                another = find_name(line, NULL, p_value, TERM_TAB);
-               if (!another || memcmp(another, name, len + 1))
+               if (!another || memcmp(another, orig_name, len + 1))
                        die((side == DIFF_NEW_NAME) ?
                            _("git apply: bad git-diff - inconsistent new filename on line %d") :
                            _("git apply: bad git-diff - inconsistent old filename on line %d"), linenr);
                free(another);
                return orig_name;
-       }
-       else {
+       } else {
                /* expect "/dev/null" */
                if (memcmp("/dev/null", line, 9) || line[9] != '\n')
                        die(_("git apply: bad git-diff - expected /dev/null on line %d"), linenr);
  
  static int gitdiff_oldname(const char *line, struct patch *patch)
  {
-       char *orig = patch->old_name;
        patch->old_name = gitdiff_verify_name(line, patch->is_new, patch->old_name,
                                              DIFF_OLD_NAME);
-       if (orig != patch->old_name)
-               free(orig);
        return 0;
  }
  
  static int gitdiff_newname(const char *line, struct patch *patch)
  {
-       char *orig = patch->new_name;
        patch->new_name = gitdiff_verify_name(line, patch->is_delete, patch->new_name,
                                              DIFF_NEW_NAME);
-       if (orig != patch->new_name)
-               free(orig);
        return 0;
  }
  
@@@ -1872,6 -1863,11 +1863,11 @@@ static struct fragment *parse_binary_hu
        return NULL;
  }
  
+ /*
+  * Returns:
+  *   -1 in case of error,
+  *   the length of the parsed binary patch otherwise
+  */
  static int parse_binary(char *buffer, unsigned long size, struct patch *patch)
  {
        /*
@@@ -2017,6 -2013,8 +2013,8 @@@ static int parse_chunk(char *buffer, un
                        linenr++;
                        used = parse_binary(buffer + hd + llen,
                                            size - hd - llen, patch);
+                       if (used < 0)
+                               return -1;
                        if (used)
                                patchsize = used + llen;
                        else
@@@ -4373,8 -4371,10 +4371,10 @@@ static int apply_patch(int fd, const ch
                patch->inaccurate_eof = !!(options & INACCURATE_EOF);
                patch->recount =  !!(options & RECOUNT);
                nr = parse_chunk(buf.buf + offset, buf.len - offset, patch);
-               if (nr < 0)
+               if (nr < 0) {
+                       free_patch(patch);
                        break;
+               }
                if (apply_in_reverse)
                        reverse_patches(patch);
                if (use_patch(patch)) {
                        listp = &patch->next;
                }
                else {
 +                      if (apply_verbosely)
 +                              say_patch_name(stderr, _("Skipped patch '%s'."), patch);
                        free_patch(patch);
                        skipped_patch++;
                }