Deal with binary diff output from GNU diff 2.8.7

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>
This commit is contained in:
Junio C Hamano 2005-11-17 20:46:29 -08:00
parent a575603af2
commit 3200d1aee0

22
apply.c
View file

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