Handle short writes in cp(1)

---
 bin/cp/utils.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/bin/cp/utils.c b/bin/cp/utils.c
index 347081151f2..40265fce7f7 100644
--- a/bin/cp/utils.c
+++ b/bin/cp/utils.c
@@ -149,11 +149,16 @@ copy_file(FTSENT *entp, int exists)
                                wcount = lseek(to_fd, rcount, SEEK_CUR) == -1 ? 
-1 : rcount;
                        else
                                wcount = write(to_fd, buf, rcount);
-                       if (rcount != wcount || wcount == -1) {
+                       if (wcount == -1) {
                                warn("%s", to.p_path);
                                rval = 1;
                                break;
                        }
+                       if (rcount != wcount) {
+                               warnx("%s: short write", to.p_path);
+                               rval = 1;
+                               break;
+                       }
                }
                if (skipholes && rcount != -1)
                        rcount = ftruncate(to_fd, lseek(to_fd, 0, SEEK_CUR));
-- 
2.44.0

Reply via email to