patch: handle stripped/empty lines mid-hunk
Some programs will strip trailing spaces from hunks; in this case we want to treat the line as though it came with a leading space. This fixes applying some patches, such as [PATCH] Permissions for child boards in /srv
This commit is contained in:
parent
6dbfe8c356
commit
d457233c70
1 changed files with 9 additions and 3 deletions
|
@ -287,13 +287,13 @@ hunk:
|
|||
while(1){
|
||||
if((ln = readline(f, &lnum)) == nil){
|
||||
if(oldcnt != h.oldcnt || newcnt != h.newcnt)
|
||||
sysfatal("%s:%d: malformed hunk", name, lnum);
|
||||
sysfatal("%s:%d: malformed hunk: mismatched counts", name, lnum);
|
||||
addhunk(p, &h);
|
||||
break;
|
||||
}
|
||||
switch(ln[0]){
|
||||
default:
|
||||
sysfatal("%s:%d: malformed hunk2", name, lnum);
|
||||
sysfatal("%s:%d: malformed hunk: leading junk", name, lnum);
|
||||
goto out;
|
||||
case '-':
|
||||
addold(&h, ln);
|
||||
|
@ -303,6 +303,12 @@ hunk:
|
|||
addnew(&h, ln);
|
||||
newcnt++;
|
||||
break;
|
||||
case '\n':
|
||||
addold(&h, " \n");
|
||||
addnew(&h, " \n");
|
||||
oldcnt++;
|
||||
newcnt++;
|
||||
break;
|
||||
case ' ':
|
||||
addold(&h, ln);
|
||||
addnew(&h, ln);
|
||||
|
@ -312,7 +318,7 @@ hunk:
|
|||
}
|
||||
free(ln);
|
||||
if(oldcnt > h.oldcnt || newcnt > h.newcnt)
|
||||
sysfatal("%s:%d: malformed hunk", name, lnum);
|
||||
sysfatal("%s:%d: malformed hunk: oversized hunk", name, lnum);
|
||||
if(oldcnt < h.oldcnt || newcnt < h.newcnt)
|
||||
continue;
|
||||
|
||||
|
|
Loading…
Reference in a new issue