Can you try the patch below?

---START PATCH---
diff -urN ftp.orig/fetch.c ftp/fetch.c
--- ftp.orig/fetch.c    2020-07-11 00:29:38.000000000 +0000
+++ ftp/fetch.c 2021-07-01 22:20:41.620575702 +0000
@@ -1640,7 +1640,7 @@
                        if (ischunked)
                                bufrem = MIN(chunksize, bufrem);
                        while (bufrem > 0) {
-                               size_t nr = MIN((off_t)bufsize, bufrem);
+                               size_t wrt, nw, nr = MIN((off_t)bufsize, 
bufrem);
                                flen = fetch_read(xferbuf, sizeof(char),
                                    nr, fin);
                                if (flen == 0) {
@@ -1650,10 +1650,14 @@
                                }
                                bytes += flen;
                                bufrem -= flen;
-                               if (fwrite(xferbuf, sizeof(char), flen, fout)
-                                   != flen) {
-                                       warn("Writing `%s'", savefile);
-                                       goto cleanup_fetch_url;
+                               for (wrt = 0; wrt < flen; wrt += nw) {
+                                       errno = 0;
+                                       nw = fwrite(xferbuf + wrt, sizeof(char),
+                                                   flen - wrt, fout);
+                                       if ((nw != flen - wrt) && (errno != 
EINTR)) {
+                                               warn("Writing `%s'", savefile);
+                                               goto cleanup_fetch_url;
+                                       }
                                }
                                if (hash && !progress) {
                                        while (bytes >= hashbytes) {
---END PATCH---

-RVP

Reply via email to