Fix IoVec length type

toolchain_update
Jiajie Chen 6 years ago
parent f74a3b8e8b
commit 229c64cc7d

@ -1155,7 +1155,7 @@ pub struct IoVec {
/// Starting address /// Starting address
base: *mut u8, base: *mut u8,
/// Number of bytes to transfer /// Number of bytes to transfer
len: u64, len: usize,
} }
/// A valid IoVecs request from user /// A valid IoVecs request from user
@ -1176,15 +1176,15 @@ impl IoVecs {
if iov.len > 0 { if iov.len > 0 {
// skip empty iov // skip empty iov
if readv { if readv {
vm.check_write_array(iov.base, iov.len as usize)?; vm.check_write_array(iov.base, iov.len)?;
} else { } else {
vm.check_read_array(iov.base, iov.len as usize)?; vm.check_read_array(iov.base, iov.len)?;
} }
} }
} }
let slices = iovs let slices = iovs
.iter() .iter()
.map(|iov| unsafe { slice::from_raw_parts_mut(iov.base, iov.len as usize) }) .map(|iov| unsafe { slice::from_raw_parts_mut(iov.base, iov.len) })
.collect(); .collect();
Ok(IoVecs(slices)) Ok(IoVecs(slices))
} }
@ -1215,6 +1215,7 @@ impl IoVecs {
/// For writev: `set_len` is false, Vec.cap = total_len. /// For writev: `set_len` is false, Vec.cap = total_len.
pub fn new_buf(&self, set_len: bool) -> Vec<u8> { pub fn new_buf(&self, set_len: bool) -> Vec<u8> {
let total_len = self.0.iter().map(|slice| slice.len()).sum::<usize>(); let total_len = self.0.iter().map(|slice| slice.len()).sum::<usize>();
info!("{}", total_len);
let mut buf = Vec::with_capacity(total_len); let mut buf = Vec::with_capacity(total_len);
if set_len { if set_len {
unsafe { unsafe {

Loading…
Cancel
Save