[PATCH] patch: handle files with no final newline
Roberto A. Foglietta
roberto.foglietta at gmail.com
Sun Apr 19 09:58:30 UTC 2026
On Sun, 19 Apr 2026 at 11:04, Ron Yorston via busybox
<busybox at busybox.net> wrote:
>
> GNU and BSD patch both handle patches which include the annotation
> '\ No newline at end of file'. BusyBox patch doesn't, even though
> its diff emits it.
>
This patch is worth applying because sha/md5sum would break otherwise
compared to the expected result of a patched file. In particular,
because busybox diff/patch duo aren't currently aligned on this
feature. Therefore, it can be considered also a bugfix rather than a
mere feature addition.
Did not check the whole patch yet, but this below caught my eyes.
> @@ -433,7 +435,17 @@ int patch_main(int argc UNUSED_PARAM, char **argv)
>
> // Are we assembling a hunk?
> if (state >= 2) {
> - if (*patchline == ' ' || *patchline == '+' || *patchline == '-') {
> + switch (*patchline) {
> + case '\\':
> + // '\ No newline at end of file' detected, mark
> + // previous line, if it exists.
> + if (TT.current_hunk->prev)
> + TT.current_hunk->prev->no_newline = TRUE;
> + free(patchline);
> + continue;
if(*patchline == '\\') {
do_stuff; continue;
}
Using keyword "continue" into a "switch" isn't a good idea because the
"continue"/"break" duo would not refer to the same level of nested
coding: "break" to the "switch" and "continue" to the upper loop.
Therefore if(new case) continue; if(like before) is a better stylistic
choice rather than injecting a "continue" into a "switch"/"case".
However, it is not a mistake by itself.
Best regards, R-
More information about the busybox
mailing list