|
1 |
| -use libc::c_void; |
2 |
| - |
3 |
| -use super::abi::sockets::iovec; |
4 | 1 | use crate::marker::PhantomData;
|
5 | 2 | use crate::slice;
|
| 3 | +use crate::sys::c; |
6 | 4 |
|
7 | 5 | #[derive(Copy, Clone)]
|
8 | 6 | #[repr(transparent)]
|
9 | 7 | pub struct IoSlice<'a> {
|
10 |
| - vec: iovec, |
| 8 | + vec: c::WSABUF, |
11 | 9 | _p: PhantomData<&'a [u8]>,
|
12 | 10 | }
|
13 | 11 |
|
14 | 12 | impl<'a> IoSlice<'a> {
|
15 | 13 | #[inline]
|
16 | 14 | pub fn new(buf: &'a [u8]) -> IoSlice<'a> {
|
| 15 | + assert!(buf.len() <= u32::MAX as usize); |
17 | 16 | IoSlice {
|
18 |
| - vec: iovec { iov_base: buf.as_ptr() as *mut u8 as *mut c_void, iov_len: buf.len() }, |
| 17 | + vec: c::WSABUF { len: buf.len() as u32, buf: buf.as_ptr() as *mut u8 }, |
19 | 18 | _p: PhantomData,
|
20 | 19 | }
|
21 | 20 | }
|
22 | 21 |
|
23 | 22 | #[inline]
|
24 | 23 | pub fn advance(&mut self, n: usize) {
|
25 |
| - if self.vec.iov_len < n { |
| 24 | + if (self.vec.len as usize) < n { |
26 | 25 | panic!("advancing IoSlice beyond its length");
|
27 | 26 | }
|
28 | 27 |
|
29 | 28 | unsafe {
|
30 |
| - self.vec.iov_len -= n; |
31 |
| - self.vec.iov_base = self.vec.iov_base.add(n); |
| 29 | + self.vec.len -= n as u32; |
| 30 | + self.vec.buf = self.vec.buf.add(n); |
32 | 31 | }
|
33 | 32 | }
|
34 | 33 |
|
35 | 34 | #[inline]
|
36 | 35 | pub const fn as_slice(&self) -> &'a [u8] {
|
37 |
| - unsafe { slice::from_raw_parts(self.vec.iov_base as *mut u8, self.vec.iov_len) } |
| 36 | + unsafe { slice::from_raw_parts(self.vec.buf, self.vec.len as usize) } |
38 | 37 | }
|
39 | 38 | }
|
40 | 39 |
|
41 | 40 | #[repr(transparent)]
|
42 | 41 | pub struct IoSliceMut<'a> {
|
43 |
| - vec: iovec, |
| 42 | + vec: c::WSABUF, |
44 | 43 | _p: PhantomData<&'a mut [u8]>,
|
45 | 44 | }
|
46 | 45 |
|
47 | 46 | impl<'a> IoSliceMut<'a> {
|
48 | 47 | #[inline]
|
49 | 48 | pub fn new(buf: &'a mut [u8]) -> IoSliceMut<'a> {
|
| 49 | + assert!(buf.len() <= u32::MAX as usize); |
50 | 50 | IoSliceMut {
|
51 |
| - vec: iovec { iov_base: buf.as_mut_ptr() as *mut c_void, iov_len: buf.len() }, |
| 51 | + vec: c::WSABUF { len: buf.len() as u32, buf: buf.as_mut_ptr() }, |
52 | 52 | _p: PhantomData,
|
53 | 53 | }
|
54 | 54 | }
|
55 | 55 |
|
56 | 56 | #[inline]
|
57 | 57 | pub fn advance(&mut self, n: usize) {
|
58 |
| - if self.vec.iov_len < n { |
| 58 | + if (self.vec.len as usize) < n { |
59 | 59 | panic!("advancing IoSliceMut beyond its length");
|
60 | 60 | }
|
61 | 61 |
|
62 | 62 | unsafe {
|
63 |
| - self.vec.iov_len -= n; |
64 |
| - self.vec.iov_base = self.vec.iov_base.add(n); |
| 63 | + self.vec.len -= n as u32; |
| 64 | + self.vec.buf = self.vec.buf.add(n); |
65 | 65 | }
|
66 | 66 | }
|
67 | 67 |
|
68 | 68 | #[inline]
|
69 | 69 | pub fn as_slice(&self) -> &[u8] {
|
70 |
| - unsafe { slice::from_raw_parts(self.vec.iov_base as *mut u8, self.vec.iov_len) } |
| 70 | + unsafe { slice::from_raw_parts(self.vec.buf, self.vec.len as usize) } |
71 | 71 | }
|
72 | 72 |
|
73 | 73 | #[inline]
|
74 | 74 | pub const fn into_slice(self) -> &'a mut [u8] {
|
75 |
| - unsafe { slice::from_raw_parts_mut(self.vec.iov_base as *mut u8, self.vec.iov_len) } |
| 75 | + unsafe { slice::from_raw_parts_mut(self.vec.buf, self.vec.len as usize) } |
76 | 76 | }
|
77 | 77 |
|
78 | 78 | #[inline]
|
79 | 79 | pub fn as_mut_slice(&mut self) -> &mut [u8] {
|
80 |
| - unsafe { slice::from_raw_parts_mut(self.vec.iov_base as *mut u8, self.vec.iov_len) } |
| 80 | + unsafe { slice::from_raw_parts_mut(self.vec.buf, self.vec.len as usize) } |
81 | 81 | }
|
82 | 82 | }
|
83 |
| - |
84 |
| -pub fn is_terminal<T>(_: &T) -> bool { |
85 |
| - false |
86 |
| -} |
0 commit comments