Skip to content

Commit c013e32

Browse files
authored
feat: update edition to 2024 (#543)
* feat: update edition to 2024 * fix(runtime): captures * fix(compio): unsafe warnings * fix(buf): warnings * fix(driver,iocp): warnings * fix(runtime): warnings * fix(io): warnings * fix(fs): warnings * fix(net): warnings * fix(macros): warnings * fix(quic): warnings * fix(driver): warnings * fix(net,unix): warnings * fix(process): warnings * fix(quic): warnings * fix: unsafe extern block * fix(signal): warnings * fix(quic): warnings in the build script * fix(signal): warnings
1 parent 8eba652 commit c013e32

File tree

51 files changed

+560
-459
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+560
-459
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ members = [
1919
resolver = "2"
2020

2121
[workspace.package]
22-
edition = "2021"
22+
edition = "2024"
2323
authors = ["Berrysoft <Strawberry_Str@hotmail.com>"]
2424
readme = "README.md"
2525
license = "MIT"

compio-buf/src/io_buf.rs

Lines changed: 29 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ pub unsafe trait IoBuf: 'static {
4949
/// It is static to provide convenience from writing self-referenced
5050
/// structure.
5151
unsafe fn as_io_slice(&self) -> IoSlice {
52-
IoSlice::from_slice(self.as_slice())
52+
unsafe { IoSlice::from_slice(self.as_slice()) }
5353
}
5454

5555
/// Create an [`IoBuffer`] of this buffer.
@@ -60,11 +60,13 @@ pub unsafe trait IoBuf: 'static {
6060
/// It is static to provide convenience from writing self-referenced
6161
/// structure.
6262
unsafe fn as_io_buffer(&self) -> IoBuffer {
63-
IoBuffer::new(
64-
self.as_buf_ptr().cast_mut().cast(),
65-
self.buf_len(),
66-
self.buf_capacity(),
67-
)
63+
unsafe {
64+
IoBuffer::new(
65+
self.as_buf_ptr().cast_mut().cast(),
66+
self.buf_len(),
67+
self.buf_capacity(),
68+
)
69+
}
6870
}
6971

7072
/// Returns a view of the buffer with the specified range.
@@ -398,7 +400,7 @@ pub unsafe trait IoBufMut: IoBuf + SetBufInit {
398400
/// It is static to provide convenience from writing self-referenced
399401
/// structure.
400402
unsafe fn as_io_slice_mut(&mut self) -> IoSliceMut {
401-
IoSliceMut::from_uninit(self.as_mut_slice())
403+
unsafe { IoSliceMut::from_uninit(self.as_mut_slice()) }
402404
}
403405
}
404406

@@ -474,28 +476,29 @@ pub trait SetBufInit {
474476
///
475477
/// # Safety
476478
///
477-
/// `len` should be less or equal than `buf_capacity()`.
479+
/// * `len` should be less or equal than `buf_capacity()`.
480+
/// * The bytes in the range `[buf_len(), len)` must be initialized.
478481
unsafe fn set_buf_init(&mut self, len: usize);
479482
}
480483

481484
impl<B: SetBufInit + ?Sized> SetBufInit for &'static mut B {
482485
unsafe fn set_buf_init(&mut self, len: usize) {
483-
(**self).set_buf_init(len)
486+
unsafe { (**self).set_buf_init(len) }
484487
}
485488
}
486489

487490
impl<B: SetBufInit + ?Sized, #[cfg(feature = "allocator_api")] A: Allocator + 'static> SetBufInit
488491
for t_alloc!(Box, B, A)
489492
{
490493
unsafe fn set_buf_init(&mut self, len: usize) {
491-
(**self).set_buf_init(len)
494+
unsafe { (**self).set_buf_init(len) }
492495
}
493496
}
494497

495498
impl<#[cfg(feature = "allocator_api")] A: Allocator + 'static> SetBufInit for t_alloc!(Vec, u8, A) {
496499
unsafe fn set_buf_init(&mut self, len: usize) {
497500
if (**self).buf_len() < len {
498-
self.set_len(len);
501+
unsafe { self.set_len(len) };
499502
}
500503
}
501504
}
@@ -516,7 +519,7 @@ impl<const N: usize> SetBufInit for [u8; N] {
516519
impl SetBufInit for bytes::BytesMut {
517520
unsafe fn set_buf_init(&mut self, len: usize) {
518521
if (**self).buf_len() < len {
519-
self.set_len(len);
522+
unsafe { self.set_len(len) };
520523
}
521524
}
522525
}
@@ -535,7 +538,7 @@ impl SetBufInit for std::io::BorrowedBuf<'static> {
535538
impl<const N: usize> SetBufInit for arrayvec::ArrayVec<u8, N> {
536539
unsafe fn set_buf_init(&mut self, len: usize) {
537540
if (**self).buf_len() < len {
538-
self.set_len(len);
541+
unsafe { self.set_len(len) };
539542
}
540543
}
541544
}
@@ -547,35 +550,35 @@ where
547550
{
548551
unsafe fn set_buf_init(&mut self, len: usize) {
549552
if (**self).buf_len() < len {
550-
self.set_len(len);
553+
unsafe { self.set_len(len) };
551554
}
552555
}
553556
}
554557

555558
impl<T: IoBufMut> SetBufInit for [T] {
556559
unsafe fn set_buf_init(&mut self, len: usize) {
557-
default_set_buf_init(self.iter_mut(), len)
560+
unsafe { default_set_buf_init(self.iter_mut(), len) }
558561
}
559562
}
560563

561564
impl<T: IoBufMut, const N: usize> SetBufInit for [T; N] {
562565
unsafe fn set_buf_init(&mut self, len: usize) {
563-
default_set_buf_init(self.iter_mut(), len)
566+
unsafe { default_set_buf_init(self.iter_mut(), len) }
564567
}
565568
}
566569

567570
impl<T: IoBufMut, #[cfg(feature = "allocator_api")] A: Allocator + 'static> SetBufInit
568571
for t_alloc!(Vec, T, A)
569572
{
570573
unsafe fn set_buf_init(&mut self, len: usize) {
571-
default_set_buf_init(self.iter_mut(), len)
574+
unsafe { default_set_buf_init(self.iter_mut(), len) }
572575
}
573576
}
574577

575578
#[cfg(feature = "arrayvec")]
576579
impl<T: IoBufMut, const N: usize> SetBufInit for arrayvec::ArrayVec<T, N> {
577580
unsafe fn set_buf_init(&mut self, len: usize) {
578-
default_set_buf_init(self.iter_mut(), len)
581+
unsafe { default_set_buf_init(self.iter_mut(), len) }
579582
}
580583
}
581584

@@ -585,21 +588,26 @@ where
585588
[T; N]: smallvec::Array<Item = T>,
586589
{
587590
unsafe fn set_buf_init(&mut self, len: usize) {
588-
default_set_buf_init(self.iter_mut(), len)
591+
unsafe { default_set_buf_init(self.iter_mut(), len) }
589592
}
590593
}
591594

595+
/// # Safety
596+
/// * `len` should be less or equal than the sum of `buf_capacity()` of all
597+
/// buffers.
598+
/// * The bytes in the range `[buf_len(), new_len)` of each buffer must be
599+
/// initialized
592600
unsafe fn default_set_buf_init<'a, B: IoBufMut>(
593601
iter: impl IntoIterator<Item = &'a mut B>,
594602
mut len: usize,
595603
) {
596604
for buf in iter {
597605
let capacity = (*buf).buf_capacity();
598606
if len >= capacity {
599-
buf.set_buf_init(capacity);
607+
unsafe { buf.set_buf_init(capacity) };
600608
len -= capacity;
601609
} else {
602-
buf.set_buf_init(len);
610+
unsafe { buf.set_buf_init(len) };
603611
len = 0;
604612
}
605613
}

compio-buf/src/io_slice.rs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,11 @@ impl IoSlice {
9292
/// The caller must ensure that, during the lifetime of the `IoSlice`, the
9393
/// slice is valid the and is not used for mutating.
9494
pub unsafe fn from_slice(slice: &[u8]) -> Self {
95-
Self::new(slice.as_ptr() as _, slice.len())
95+
// SAFETY:
96+
// - the length is correct
97+
// - the content of the buffer is initialized
98+
// - the slice is not used for mutating while the `IoSlice` is in use
99+
unsafe { Self::new(slice.as_ptr() as _, slice.len()) }
96100
}
97101

98102
/// Get the pointer to the buffer.
@@ -143,7 +147,10 @@ impl IoSliceMut {
143147
/// The caller must ensure that, during the lifetime of the `IoSliceMut`,
144148
/// the slice is valid the and is not used for anything else.
145149
pub unsafe fn from_slice(slice: &mut [u8]) -> Self {
146-
Self::new(slice.as_mut_ptr() as _, slice.len())
150+
// SAFETY:
151+
// - the length is correct
152+
// - the slice is not used for anything else while the `IoSliceMut` is in use
153+
unsafe { Self::new(slice.as_mut_ptr() as _, slice.len()) }
147154
}
148155

149156
/// Create a new `IoSliceMut` from a uninitialized slice.
@@ -152,7 +159,10 @@ impl IoSliceMut {
152159
/// The caller must ensure that, during the lifetime of the `IoSliceMut`,
153160
/// the slice is valid the and is not used for anything else.
154161
pub unsafe fn from_uninit(slice: &mut [MaybeUninit<u8>]) -> Self {
155-
Self::new(slice.as_mut_ptr(), slice.len())
162+
// SAFETY:
163+
// - the length is correct
164+
// - the slice is not used for anything else while the `IoSliceMut` is in use
165+
unsafe { Self::new(slice.as_mut_ptr(), slice.len()) }
156166
}
157167

158168
/// Get the pointer to the buffer.

compio-buf/src/io_vec_buf.rs

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ pub trait IoVectoredBuf: 'static {
2424
/// It is static to provide convenience from writing self-referenced
2525
/// structure.
2626
unsafe fn io_slices(&self) -> Vec<IoSlice> {
27-
self.iter_io_slice().collect()
27+
unsafe { self.iter_io_slice() }.collect()
2828
}
2929

3030
/// An iterator over the [`IoSlice`]s.
@@ -35,7 +35,7 @@ pub trait IoVectoredBuf: 'static {
3535
/// It is static to provide convenience from writing self-referenced
3636
/// structure.
3737
unsafe fn iter_io_slice(&self) -> impl Iterator<Item = IoSlice> {
38-
self.iter_io_buffer().map(IoSlice::from)
38+
unsafe { self.iter_io_buffer() }.map(IoSlice::from)
3939
}
4040

4141
/// An iterator over slices.
@@ -86,34 +86,34 @@ pub trait IoVectoredBuf: 'static {
8686

8787
impl<T: IoBuf> IoVectoredBuf for &'static [T] {
8888
unsafe fn iter_io_buffer(&self) -> impl Iterator<Item = IoBuffer> {
89-
self.iter().map(|buf| buf.as_io_buffer())
89+
self.iter().map(|buf| unsafe { buf.as_io_buffer() })
9090
}
9191
}
9292

9393
impl<T: IoBuf> IoVectoredBuf for &'static mut [T] {
9494
unsafe fn iter_io_buffer(&self) -> impl Iterator<Item = IoBuffer> {
95-
self.iter().map(|buf| buf.as_io_buffer())
95+
self.iter().map(|buf| unsafe { buf.as_io_buffer() })
9696
}
9797
}
9898

9999
impl<T: IoBuf, const N: usize> IoVectoredBuf for [T; N] {
100100
unsafe fn iter_io_buffer(&self) -> impl Iterator<Item = IoBuffer> {
101-
self.iter().map(|buf| buf.as_io_buffer())
101+
self.iter().map(|buf| unsafe { buf.as_io_buffer() })
102102
}
103103
}
104104

105105
impl<T: IoBuf, #[cfg(feature = "allocator_api")] A: std::alloc::Allocator + 'static> IoVectoredBuf
106106
for t_alloc!(Vec, T, A)
107107
{
108108
unsafe fn iter_io_buffer(&self) -> impl Iterator<Item = IoBuffer> {
109-
self.iter().map(|buf| buf.as_io_buffer())
109+
self.iter().map(|buf| unsafe { buf.as_io_buffer() })
110110
}
111111
}
112112

113113
#[cfg(feature = "arrayvec")]
114114
impl<T: IoBuf, const N: usize> IoVectoredBuf for arrayvec::ArrayVec<T, N> {
115115
unsafe fn iter_io_buffer(&self) -> impl Iterator<Item = IoBuffer> {
116-
self.iter().map(|buf| buf.as_io_buffer())
116+
self.iter().map(|buf| unsafe { buf.as_io_buffer() })
117117
}
118118
}
119119

@@ -123,19 +123,19 @@ where
123123
[T; N]: smallvec::Array<Item = T>,
124124
{
125125
unsafe fn iter_io_buffer(&self) -> impl Iterator<Item = IoBuffer> {
126-
self.iter().map(|buf| buf.as_io_buffer())
126+
self.iter().map(|buf| unsafe { buf.as_io_buffer() })
127127
}
128128
}
129129

130130
impl<T: IoBuf, Rest: IoVectoredBuf> IoVectoredBuf for (T, Rest) {
131131
unsafe fn iter_io_buffer(&self) -> impl Iterator<Item = IoBuffer> {
132-
std::iter::once(self.0.as_io_buffer()).chain(self.1.iter_io_buffer())
132+
unsafe { std::iter::once(self.0.as_io_buffer()).chain(self.1.iter_io_buffer()) }
133133
}
134134
}
135135

136136
impl<T: IoBuf> IoVectoredBuf for (T,) {
137137
unsafe fn iter_io_buffer(&self) -> impl Iterator<Item = IoBuffer> {
138-
std::iter::once(self.0.as_io_buffer())
138+
unsafe { std::iter::once(self.0.as_io_buffer()) }
139139
}
140140
}
141141

@@ -155,7 +155,7 @@ pub trait IoVectoredBufMut: IoVectoredBuf + SetBufInit {
155155
/// It is static to provide convenience from writing self-referenced
156156
/// structure.
157157
unsafe fn io_slices_mut(&mut self) -> Vec<IoSliceMut> {
158-
self.iter_io_slice_mut().collect()
158+
unsafe { self.iter_io_slice_mut() }.collect()
159159
}
160160

161161
/// An iterator over the [`IoSliceMut`]s.
@@ -166,7 +166,7 @@ pub trait IoVectoredBufMut: IoVectoredBuf + SetBufInit {
166166
/// It is static to provide convenience from writing self-referenced
167167
/// structure.
168168
unsafe fn iter_io_slice_mut(&mut self) -> impl Iterator<Item = IoSliceMut> {
169-
self.iter_io_buffer().map(IoSliceMut::from)
169+
unsafe { self.iter_io_buffer() }.map(IoSliceMut::from)
170170
}
171171

172172
/// An iterator over mutable slices.
@@ -214,14 +214,16 @@ impl<T: IoBufMut, Rest: IoVectoredBufMut> SetBufInit for (T, Rest) {
214214
unsafe fn set_buf_init(&mut self, len: usize) {
215215
let buf0_len = std::cmp::min(len, self.0.buf_capacity());
216216

217-
self.0.set_buf_init(buf0_len);
218-
self.1.set_buf_init(len - buf0_len);
217+
// SAFETY: buf0_len <= self.0.buf_capacity()
218+
unsafe { self.0.set_buf_init(buf0_len) };
219+
// SAFETY: propogate
220+
unsafe { self.1.set_buf_init(len - buf0_len) };
219221
}
220222
}
221223

222224
impl<T: IoBufMut> SetBufInit for (T,) {
223225
unsafe fn set_buf_init(&mut self, len: usize) {
224-
self.0.set_buf_init(len);
226+
unsafe { self.0.set_buf_init(len) };
225227
}
226228
}
227229

@@ -299,7 +301,7 @@ unsafe impl<T: IoVectoredBuf> IoBuf for VectoredBufIter<T> {
299301
impl<T: IoVectoredBuf + SetBufInit> SetBufInit for VectoredBufIter<T> {
300302
unsafe fn set_buf_init(&mut self, len: usize) {
301303
self.cur_filled = len;
302-
self.buf.set_buf_init(self.filled + self.cur_filled);
304+
unsafe { self.buf.set_buf_init(self.filled + self.cur_filled) };
303305
}
304306
}
305307

compio-buf/src/slice.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ unsafe impl<T: IoBufMut> IoBufMut for Slice<T> {
108108

109109
impl<T: SetBufInit> SetBufInit for Slice<T> {
110110
unsafe fn set_buf_init(&mut self, len: usize) {
111-
self.buffer.set_buf_init(self.begin + len)
111+
unsafe { self.buffer.set_buf_init(self.begin + len) }
112112
}
113113
}
114114

@@ -154,16 +154,15 @@ impl<T> VectoredSlice<T> {
154154
impl<T: IoVectoredBuf> IoVectoredBuf for VectoredSlice<T> {
155155
unsafe fn iter_io_buffer(&self) -> impl Iterator<Item = IoBuffer> {
156156
let mut offset = self.begin;
157-
self.buf.iter_io_buffer().filter_map(move |buf| {
157+
unsafe { self.buf.iter_io_buffer() }.filter_map(move |buf| {
158158
let len = buf.len();
159159
let sub = len.min(offset);
160160
offset -= sub;
161161
if len - sub > 0 {
162-
Some(IoBuffer::new(
163-
buf.as_ptr().add(sub),
164-
len - sub,
165-
buf.capacity() - sub,
166-
))
162+
// SAFETY: sub <= len
163+
Some(unsafe {
164+
IoBuffer::new(buf.as_ptr().add(sub), len - sub, buf.capacity() - sub)
165+
})
167166
} else {
168167
None
169168
}
@@ -213,13 +212,14 @@ impl<T> VectoredSliceMut<T> {
213212
impl<T: IoVectoredBuf> IoVectoredBuf for VectoredSliceMut<T> {
214213
unsafe fn iter_io_buffer(&self) -> impl Iterator<Item = IoBuffer> {
215214
let mut offset = self.begin;
216-
self.buf.iter_io_buffer().filter_map(move |buf| {
215+
unsafe { self.buf.iter_io_buffer() }.filter_map(move |buf| {
217216
let capacity = buf.capacity();
218217
let sub = capacity.min(offset);
219218
offset -= sub;
220219
if capacity - sub > 0 {
221220
let len = buf.len().saturating_sub(sub);
222-
Some(IoBuffer::new(buf.as_ptr().add(sub), len, capacity - sub))
221+
// SAFETY: sub <= capacity
222+
Some(unsafe { IoBuffer::new(buf.as_ptr().add(sub), len, capacity - sub) })
223223
} else {
224224
None
225225
}
@@ -237,7 +237,7 @@ impl<T> IntoInner for VectoredSliceMut<T> {
237237

238238
impl<T: SetBufInit> SetBufInit for VectoredSliceMut<T> {
239239
unsafe fn set_buf_init(&mut self, len: usize) {
240-
self.buf.set_buf_init(self.begin + len);
240+
unsafe { self.buf.set_buf_init(self.begin + len) }
241241
}
242242
}
243243

compio-buf/src/uninit.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ unsafe impl<T: IoBufMut> IoBufMut for Uninit<T> {
7676

7777
impl<T: SetBufInit + IoBuf> SetBufInit for Uninit<T> {
7878
unsafe fn set_buf_init(&mut self, len: usize) {
79-
self.0.set_buf_init(self.0.buf_len() + len);
79+
unsafe { self.0.set_buf_init(self.0.buf_len() + len) };
8080
let inner = self.0.as_inner();
8181
self.0.set_range(inner.buf_len(), inner.buf_capacity());
8282
}

0 commit comments

Comments
 (0)