diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2019-08-09 21:13:19 +0200 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2019-08-09 21:13:19 +0200 |
commit | 69c9e6031abc309bd801e798a0d5d530f1e893a7 (patch) | |
tree | 13e4d571508082d8738d68c5fe7a5339482bceb4 /src/c/string.rs | |
parent | 0abdc827c9aa9e3f64d31d62663ea232863e4e76 (diff) | |
download | neco-69c9e6031abc309bd801e798a0d5d530f1e893a7.tar neco-69c9e6031abc309bd801e798a0d5d530f1e893a7.zip |
WIP
Diffstat (limited to 'src/c/string.rs')
-rw-r--r-- | src/c/string.rs | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/src/c/string.rs b/src/c/string.rs index 8babef6..d0e620c 100644 --- a/src/c/string.rs +++ b/src/c/string.rs @@ -11,15 +11,14 @@ fn must_succeed<T>(p: *mut T) -> *mut T { p } -unsafe fn malloc<T>() -> *mut T { +fn malloc<T>() -> *mut T { let size = mem::size_of::<T>(); - /*if size == 0 { + if size == 0 { return SENTINEL as *mut T; - }*/ - must_succeed(0 as *mut T) - /*must_succeed( - libc::memalign(mem::align_of::<T>() as libc::size_t, size as libc::size_t) - ) as *mut T*/ + } + must_succeed( + unsafe {libc::memalign(mem::align_of::<T>() as libc::size_t, size as libc::size_t) } + ) as *mut T } pub struct CBox<T: ?Sized>(*mut T); @@ -46,8 +45,8 @@ impl<T: ?Sized> CBox<T> { impl<T> CBox<T> { pub fn new(value: T) -> CBox<T> { + let p = malloc(); unsafe { - let p = malloc(); ptr::write(p, value); CBox::from_raw(p) } @@ -56,6 +55,7 @@ impl<T> CBox<T> { impl<T: ?Sized> Drop for CBox<T> { fn drop(&mut self) { + unsafe { ptr::drop_in_place(self.0); } let p = self.0 as *mut libc::c_void; if p != SENTINEL { unsafe { libc::free(p); } |