From 9d87b08c5279b2f0769dc7a788a9d7296926b2a2 Mon Sep 17 00:00:00 2001 From: Luflosi Date: Wed, 26 Jan 2022 23:35:54 +0100 Subject: [PATCH] Fix logic error in file copy helper functions If `errno` is `EAGAIN`, the second if statement is never true and if `errno` is not `EAGAIN`, the function returns immediately, not checking the second if statement. This commit fixes this. A logically equivalent change would have been to simply swap the two if statements but I find this version to be more readable. --- kitty/fast-file-copy.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/kitty/fast-file-copy.c b/kitty/fast-file-copy.c index dec635286..15f0257fe 100644 --- a/kitty/fast-file-copy.c +++ b/kitty/fast-file-copy.c @@ -60,9 +60,9 @@ copy_with_sendfile(int infd, int outfd, off_t in_pos, size_t len, FastFileCopyBu off_t r = in_pos; ssize_t n = sendfile(outfd, infd, &r, len); if (n < 0) { - if (errno != EAGAIN) return false; + if (errno == EAGAIN) continue; if (errno == ENOSYS || errno == EPERM) return copy_with_buffer(infd, outfd, in_pos, len, fcb); - continue; + return false; } if (n == 0) { // happens if input file is truncated @@ -83,9 +83,9 @@ copy_with_file_range(int infd, int outfd, off_t in_pos, size_t len, FastFileCopy off64_t r = in_pos; ssize_t n = copy_file_range(infd, &r, outfd, NULL, len, 0); if (n < 0) { - if (errno != EAGAIN) return false; + if (errno == EAGAIN) continue; if (errno == ENOSYS || errno == EPERM) return copy_with_sendfile(infd, outfd, in_pos, len, fcb); - continue; + return false; } if (n == 0) { // happens if input file is truncated