libfile: copy_fd: fix use of zero to mean all content

The function documents that a size of zero means that all data is
copied, but this is currently broken: On first iteration both size and
copied will be zero, so now is set to zero leading to an early exit
without any data copied at all.

One way to fix this is to have size == SIZE_MAX be the way to mean copy
as much data as possible, but let's do as the documentation say and
handle 0 bytes as infinite.

Signed-off-by: Ahmad Fatoum <[email protected]>
---
 lib/libfile.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/lib/libfile.c b/lib/libfile.c
index bc79e58a82e4..0435fc4297e1 100644
--- a/lib/libfile.c
+++ b/lib/libfile.c
@@ -148,7 +148,12 @@ int copy_fd(int in, int out, size_t size)
                return -ENOMEM;
 
        while (1) {
-               size_t now = min(bs, size - copied);
+               size_t now;
+
+               if (size)
+                       now = min(bs, size - copied);
+               else
+                       now = bs;
 
                if (!now) {
                        ret = 0;
-- 
2.47.3


Reply via email to