Skip to content

Commit 44825ba

Browse files
committed
WIP use byte slice instead of IoVec
1 parent 0836c62 commit 44825ba

File tree

2 files changed

+12
-18
lines changed

2 files changed

+12
-18
lines changed

src/sys/uio.rs

+9-15
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,18 @@
22
#![allow(improper_ctypes)]
33

44
use {Errno, Result};
5-
use libc::{c_int, c_void, size_t, off_t};
5+
use libc::{self, c_int, c_void, size_t, off_t};
66
use std::marker::PhantomData;
77
use std::os::unix::io::RawFd;
88

99
mod ffi {
10-
use super::IoVec;
11-
use libc::{ssize_t, c_int, size_t, off_t, c_void};
10+
//use super::IoVec;
11+
use libc::{ssize_t, size_t, off_t, c_void};
1212
use std::os::unix::io::RawFd;
1313

14-
extern {
15-
// vectorized version of write
16-
// doc: http://man7.org/linux/man-pages/man2/writev.2.html
17-
pub fn writev(fd: RawFd, iov: *const IoVec<&[u8]>, iovcnt: c_int) -> ssize_t;
18-
19-
// vectorized version of read
20-
// doc: http://man7.org/linux/man-pages/man2/readv.2.html
21-
pub fn readv(fd: RawFd, iov: *const IoVec<&mut [u8]>, iovcnt: c_int) -> ssize_t;
14+
pub use libc::{readv, writev};
2215

16+
extern {
2317
// vectorized write at a specified offset
2418
// doc: http://man7.org/linux/man-pages/man2/pwritev.2.html
2519
#[cfg(feature = "preadv_pwritev")]
@@ -44,14 +38,14 @@ mod ffi {
4438
}
4539
}
4640

47-
pub fn writev(fd: RawFd, iov: &[IoVec<&[u8]>]) -> Result<usize> {
48-
let res = unsafe { ffi::writev(fd, iov.as_ptr(), iov.len() as c_int) };
41+
pub fn writev(fd: RawFd, iov: &[&[u8]]) -> Result<usize> {
42+
let res = unsafe { ffi::writev(fd, iov.as_ptr() as *const libc::iovec, iov.len() as c_int) };
4943

5044
Errno::result(res).map(|r| r as usize)
5145
}
5246

53-
pub fn readv(fd: RawFd, iov: &mut [IoVec<&mut [u8]>]) -> Result<usize> {
54-
let res = unsafe { ffi::readv(fd, iov.as_ptr(), iov.len() as c_int) };
47+
pub fn readv(fd: RawFd, iov: &mut [&mut [u8]]) -> Result<usize> {
48+
let res = unsafe { ffi::readv(fd, iov.as_ptr() as *const libc::iovec, iov.len() as c_int) };
5549

5650
Errno::result(res).map(|r| r as usize)
5751
}

test/sys/test_uio.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ fn test_writev() {
2222
let left = to_write.len() - consumed;
2323
let slice_len = if left <= 64 { left } else { thread_rng().gen_range(64, cmp::min(256, left)) };
2424
let b = &to_write[consumed..consumed+slice_len];
25-
iovecs.push(IoVec::from_slice(b));
25+
iovecs.push(b);
2626
consumed += slice_len;
2727
}
2828
let pipe_res = pipe();
@@ -66,7 +66,7 @@ fn test_readv() {
6666
}
6767
let mut iovecs = Vec::with_capacity(storage.len());
6868
for v in storage.iter_mut() {
69-
iovecs.push(IoVec::from_mut_slice(&mut v[..]));
69+
iovecs.push(&mut v[..]);
7070
}
7171
let pipe_res = pipe();
7272
assert!(pipe_res.is_ok());
@@ -83,7 +83,7 @@ fn test_readv() {
8383
// Cccumulate data from iovecs
8484
let mut read_buf = Vec::with_capacity(to_write.len());
8585
for iovec in iovecs.iter() {
86-
read_buf.extend(iovec.as_slice().iter().map(|x| x.clone()));
86+
read_buf.extend(iovec.iter().map(|x| x.clone()));
8787
}
8888
// Check whether iovecs contain all written data
8989
assert_eq!(read_buf.len(), to_write.len());

0 commit comments

Comments
 (0)