Skip to content

Commit ec266c4

Browse files
authored
Merge pull request RustPython#3641 from coolreader18/mini-fixes
Small fixes
2 parents ab95b57 + 117c3db commit ec266c4

File tree

3 files changed

+26
-17
lines changed

3 files changed

+26
-17
lines changed

stdlib/src/socket.rs

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -683,7 +683,7 @@ mod _socket {
683683
let mut buffer = Vec::with_capacity(bufsize);
684684
let sock = self.sock(vm)?;
685685
let n = self.sock_op(vm, SelectKind::Read, || {
686-
sock.recv_with_flags(spare_capacity_mut(&mut buffer), flags)
686+
sock.recv_with_flags(buffer.spare_capacity_mut(), flags)
687687
})?;
688688
unsafe { buffer.set_len(n) };
689689
Ok(buffer)
@@ -719,7 +719,7 @@ mod _socket {
719719
let mut buffer = Vec::with_capacity(bufsize);
720720
let (n, addr) = self.sock_op(vm, SelectKind::Read, || {
721721
self.sock_io()?
722-
.recv_from_with_flags(spare_capacity_mut(&mut buffer), flags)
722+
.recv_from_with_flags(buffer.spare_capacity_mut(), flags)
723723
})?;
724724
unsafe { buffer.set_len(n) };
725725
Ok((buffer, get_addr_tuple(&addr, vm)))
@@ -1206,16 +1206,6 @@ mod _socket {
12061206
Ok(s.to_string_lossy().into_owned())
12071207
}
12081208

1209-
// TODO: use `Vec::spare_capacity_mut` once stable.
1210-
fn spare_capacity_mut<T>(v: &mut Vec<T>) -> &mut [MaybeUninit<T>] {
1211-
let (len, cap) = (v.len(), v.capacity());
1212-
unsafe {
1213-
std::slice::from_raw_parts_mut(
1214-
v.as_mut_ptr().add(len) as *mut MaybeUninit<T>,
1215-
cap - len,
1216-
)
1217-
}
1218-
}
12191209
fn slice_as_uninit<T>(v: &mut [T]) -> &mut [MaybeUninit<T>] {
12201210
unsafe { &mut *(v as *mut [T] as *mut [MaybeUninit<T>]) }
12211211
}
@@ -1667,7 +1657,9 @@ mod _socket {
16671657
netioapi::ConvertInterfaceLuidToNameW(luid, buf.as_mut_ptr(), buf.len())
16681658
};
16691659
if ret == 0 {
1670-
Ok(widestring::WideCString::from_vec_with_nul(&buf[..]).unwrap())
1660+
Ok(widestring::WideCString::from_ustr_truncate(
1661+
widestring::WideStr::from_slice(&buf[..]),
1662+
))
16711663
} else {
16721664
Err(io::Error::from_raw_os_error(ret as i32))
16731665
}

vm/src/stdlib/nt.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,7 @@ pub(crate) mod module {
303303
return Err(errno_err(vm));
304304
}
305305
}
306-
let buffer = widestring::WideCString::from_vec_with_nul(buffer).unwrap();
306+
let buffer = widestring::WideCString::from_vec_truncate(buffer);
307307
path.mode.process_path(buffer.to_os_string(), vm)
308308
}
309309

@@ -318,7 +318,7 @@ pub(crate) mod module {
318318
if ret == 0 {
319319
return Err(errno_err(vm));
320320
}
321-
let buffer = widestring::WideCString::from_vec_with_nul(buffer).unwrap();
321+
let buffer = widestring::WideCString::from_vec_truncate(buffer);
322322
path.mode.process_path(buffer.to_os_string(), vm)
323323
}
324324

vm/src/stdlib/thread.rs

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -208,9 +208,26 @@ pub(crate) mod _thread {
208208
}
209209

210210
fn thread_to_id(t: &thread::Thread) -> u64 {
211+
use std::hash::{Hash, Hasher};
212+
struct U64Hash {
213+
v: Option<u64>,
214+
}
215+
impl Hasher for U64Hash {
216+
fn write(&mut self, _: &[u8]) {
217+
unreachable!()
218+
}
219+
fn write_u64(&mut self, i: u64) {
220+
self.v = Some(i);
221+
}
222+
fn finish(&self) -> u64 {
223+
self.v.expect("should have written a u64")
224+
}
225+
}
211226
// TODO: use id.as_u64() once it's stable, until then, ThreadId is just a wrapper
212-
// around NonZeroU64, so this is safe
213-
unsafe { std::mem::transmute(t.id()) }
227+
// around NonZeroU64, so this should work (?)
228+
let mut h = U64Hash { v: None };
229+
t.id().hash(&mut h);
230+
h.finish()
214231
}
215232

216233
#[pyfunction]

0 commit comments

Comments
 (0)