summaryrefslogtreecommitdiffstats
path: root/src/c/string.rs
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2019-08-09 21:13:19 +0200
committerMatthias Schiffer <mschiffer@universe-factory.net>2019-08-09 21:13:19 +0200
commit69c9e6031abc309bd801e798a0d5d530f1e893a7 (patch)
tree13e4d571508082d8738d68c5fe7a5339482bceb4 /src/c/string.rs
parent0abdc827c9aa9e3f64d31d62663ea232863e4e76 (diff)
downloadneco-69c9e6031abc309bd801e798a0d5d530f1e893a7.tar
neco-69c9e6031abc309bd801e798a0d5d530f1e893a7.zip
WIP
Diffstat (limited to 'src/c/string.rs')
-rw-r--r--src/c/string.rs16
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); }