From a5e2942861324493c2cc5a32cb1473e656857b98 Mon Sep 17 00:00:00 2001 From: Nicolas Koch Date: Wed, 16 May 2018 10:35:19 +0200 Subject: Fix large file copies on 32 bit platforms --- src/libstd/sys/unix/fs.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/libstd/sys/unix/fs.rs b/src/libstd/sys/unix/fs.rs index c9d187f2ff..d8739d6532 100644 --- a/src/libstd/sys/unix/fs.rs +++ b/src/libstd/sys/unix/fs.rs @@ -815,7 +815,11 @@ pub fn copy(from: &Path, to: &Path) -> io::Result { let mut written = 0u64; while written < len { - let bytes_to_copy = len - written; + let bytes_to_copy = if len - written > usize::max_value() as u64 { + usize::max_value() + } else { + (len - written) as usize + }; let copy_result = unsafe { // We actually don't have to adjust the offsets, // because copy_file_range adjusts the file offset automatically @@ -823,7 +827,7 @@ pub fn copy(from: &Path, to: &Path) -> io::Result { ptr::null_mut(), writer.as_raw_fd(), ptr::null_mut(), - bytes_to_copy as usize, + bytes_to_copy, 0) ) }; -- cgit