For the std::io::Write implementation on TTYPort, a *const ptr is cast to *mut:
|
libc::write(self.fd, buf.as_ptr() as *mut c_void, buf.len() as size_t) |
This is unnecessary, as libc::write takes buf: *const c_void, so buf.as_ptr() as *const c_void would work fine.
For the std::io::Read implementation on TTYPort, similar but worse, as the pointer is mutated:
|
libc::read(self.fd, buf.as_ptr() as *mut c_void, buf.len() as size_t) |
In this case, the solution is buf.as_mut_ptr() as *mut c_void. The documentation on slice.as_ptr():
The caller must also ensure that the memory the pointer (non-transitively) points to is never written to (except inside an UnsafeCell) using this pointer or any pointer derived from it. If you need to mutate the contents of the slice, use as_mut_ptr.
I haven't checked any other code, so there may be more.
For the
std::io::Writeimplementation onTTYPort, a*constptr is cast to*mut:serial-rs/serial-unix/src/tty.rs
Line 149 in cb28b14
This is unnecessary, as
libc::writetakesbuf: *const c_void, sobuf.as_ptr() as *const c_voidwould work fine.For the
std::io::Readimplementation onTTYPort, similar but worse, as the pointer is mutated:serial-rs/serial-unix/src/tty.rs
Line 132 in cb28b14
In this case, the solution is
buf.as_mut_ptr() as *mut c_void. The documentation on slice.as_ptr():I haven't checked any other code, so there may be more.