From: Fredrik Kuivinen Date: Sun, 4 Sep 2005 17:29:02 +0000 (+0200) Subject: [PATCH] Make git-apply understand incomplete lines in non-C locales X-Git-Tag: v0.99.6~19 X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=433ef8a2fb93627e311217b2a41b3132933e6b0b;p=git.git [PATCH] Make git-apply understand incomplete lines in non-C locales The message "\ No newline at end of file" used by diff(1) to mark an incomplete line is locale dependent. We can't assume more than that it begins with "\ ". For example, given two files, "foo" and "bar", with appropriate contents, 'diff -u foo bar' will produce the following output on my system: --- foo 2005-09-04 18:59:38.000000000 +0200 +++ bar 2005-09-04 18:59:16.000000000 +0200 @@ -1 +1 @@ -foobar +foo \ Ingen nyrad vid filslut [jc: the check for the marker still uses the line length being no less than 12 bytes for a sanity check, but I think it is safe to assume that in other locales. I haven't checked the .po files from diff, tho'.] Signed-off-by: Fredrik Kuivinen Signed-off-by: Junio C Hamano --- diff --git a/apply.c b/apply.c index e87190ea3..964df2db1 100644 --- a/apply.c +++ b/apply.c @@ -672,9 +672,13 @@ static int parse_fragment(char *line, unsigned long size, struct patch *patch, s added++; newlines--; break; - /* We allow "\ No newline at end of file" */ + + /* We allow "\ No newline at end of file". Depending + * on locale settings when the patch was produced we + * don't know what this line looks like. The only + * thing we do know is that it begins with "\ ". */ case '\\': - if (len < 12 || memcmp(line, "\\ No newline", 12)) + if (len < 12 || memcmp(line, "\\ ", 2)) return -1; break; } @@ -683,7 +687,7 @@ static int parse_fragment(char *line, unsigned long size, struct patch *patch, s * it in the above loop because we hit oldlines == newlines == 0 * before seeing it. */ - if (12 < size && !memcmp(line, "\\ No newline", 12)) + if (12 < size && !memcmp(line, "\\ ", 2)) offset += linelen(line, size); patch->lines_added += added;