Applied, thank you

On Sat, Dec 6, 2025 at 11:57 AM Giorgi Tchankvetadze
<[email protected]> wrote:
>
> Currently, if a skip value is larger than the file size, cmp will continue
> to loop and call getc() until the skip count is satisfied, even though
> EOF has been reached.
>
> For large skip values (e.g., 1 billion), this results in significant
> CPU waste and execution time (e.g., 11 seconds on a modern CPU).
>
> This patch checks for EOF inside the skip loop and breaks early.
>
> Test case:
> $ touch empty.txt
> $ time ./busybox cmp empty.txt empty.txt 1000000000 1000000000
>
> Before:
> real    0m10.937s
>
> After:
> real    0m0.002s
>
> Signed-off-by: Giorgi Tchankvetadze <[email protected]>
> ---
>  editors/cmp.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/editors/cmp.c b/editors/cmp.c
> index ea86a2736..89539f8cf 100644
> --- a/editors/cmp.c
> +++ b/editors/cmp.c
> @@ -113,8 +113,8 @@ int cmp_main(int argc UNUSED_PARAM, char **argv)
>                 fmt = fmt_differ;
>
>         if (ENABLE_DESKTOP) {
> -               while (skip1) { getc(fp1); skip1--; }
> -               while (skip2) { getc(fp2); skip2--; }
> +               while (skip1) { if (getc(fp1) == EOF) break; skip1--; }
> +               while (skip2) { if (getc(fp2) == EOF) break; skip2--; }
>         }
>         do {
>                 if (max_count >= 0 && --max_count < 0)
> --
> 2.47.3
>
> _______________________________________________
> busybox mailing list
> [email protected]
> https://lists.busybox.net/mailman/listinfo/busybox
_______________________________________________
busybox mailing list
[email protected]
https://lists.busybox.net/mailman/listinfo/busybox

Reply via email to