Skip to content

Commit

Permalink
Deal with binary diff output from GNU diff 2.8.7
Browse files Browse the repository at this point in the history
Some vintage of diff says just "Files X and Y differ\n", instead
of "Binary files X and Y differ\n", so catch both patterns.

Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
Junio C Hamano committed Nov 18, 2005
1 parent a575603 commit 3200d1a
Showing 1 changed file with 18 additions and 6 deletions.
24 changes: 18 additions & 6 deletions apply.c
Original file line number Diff line number Diff line change
Expand Up @@ -893,12 +893,24 @@ static int parse_chunk(char *buffer, unsigned long size, struct patch *patch)
patchsize = parse_single_patch(buffer + offset + hdrsize, size - offset - hdrsize, patch);

if (!patchsize) {
static const char binhdr[] = "Binary files ";

if (sizeof(binhdr) - 1 < size - offset - hdrsize &&
!memcmp(binhdr, buffer + hdrsize + offset,
sizeof(binhdr)-1))
patch->is_binary = 1;
static const char *binhdr[] = {
"Binary files ",
"Files ",
NULL,
};
int i;
int hd = hdrsize + offset;
unsigned long llen = linelen(buffer + hd, size - hd);

if (!memcmp(" differ\n", buffer + hd + llen - 8, 8))
for (i = 0; binhdr[i]; i++) {
int len = strlen(binhdr[i]);
if (len < size - hd &&
!memcmp(binhdr[i], buffer + hd, len)) {
patch->is_binary = 1;
break;
}
}

/* Empty patch cannot be applied if:
* - it is a binary patch and we do not do binary_replace, or
Expand Down

0 comments on commit 3200d1a

Please sign in to comment.