Fix failing tests

pull/259/head
Daniel Franklin 4 years ago
parent d1c89a828d
commit 7a1be9d5b0

@ -85,25 +85,27 @@ We start by writing code to take a value allocated on the stack and transfer it
to the heap. to the heap.
```rust ```rust
# mod libc { # pub mod libc {
# pub use ::std::os::raw::{c_int, c_void, size_t}; # pub use ::std::os::raw::{c_int, c_void};
# extern "C" { pub fn posix_memalign(memptr: *mut *mut c_void, align: size_t, size: size_t) -> c_int; } # #[allow(non_camel_case_types)]
# pub type size_t = usize;
# extern "C" { pub fn posix_memalign(memptr: *mut *mut c_void, align: size_t, size: size_t) -> c_int; }
# } # }
use std::{ use std::{
mem::{align_of, size_of}, mem::{align_of, size_of},
ptr, ptr,
}; };
use libc::c_void;
struct Carton<T>(ptr::NonNull<T>); struct Carton<T>(ptr::NonNull<T>);
impl<T> Carton<T> { impl<T> Carton<T> {
pub fn new(value: T) -> Self { pub fn new(value: T) -> Self {
// Allocate enough memory on the heap to store one T. // Allocate enough memory on the heap to store one T.
assert_ne!(size_of::<T>(), 0, "Zero-sized types are out of the scope of this example"); assert_ne!(size_of::<T>(), 0, "Zero-sized types are out of the scope of this example");
let memptr: *mut c_void = ptr::null_mut(); let mut memptr = ptr::null_mut() as *mut T;
unsafe { unsafe {
let ret = libc::posix_memalign( let ret = libc::posix_memalign(
&mut memptr, (&mut memptr).cast(),
align_of::<T>(), align_of::<T>(),
size_of::<T>() size_of::<T>()
); );
@ -218,7 +220,12 @@ we need to know `free` can be called on a pointer that was yielded by an
allocation done on another thread. We can check this is true in the docs for allocation done on another thread. We can check this is true in the docs for
[`libc::free`][libc-free-docs]. [`libc::free`][libc-free-docs].
```rust,ignore ```rust
# struct Carton<T>(std::ptr::NonNull<T>);
# mod libc {
# pub use ::std::os::raw::c_void;
# extern "C" { pub fn free(p: *mut c_void); }
# }
impl<T> Drop for Carton<T> { impl<T> Drop for Carton<T> {
fn drop(&mut self) { fn drop(&mut self) {
unsafe { unsafe {

Loading…
Cancel
Save