diff --git a/x11-dl/Cargo.toml b/x11-dl/Cargo.toml index fd11faa..550c7c1 100644 --- a/x11-dl/Cargo.toml +++ b/x11-dl/Cargo.toml @@ -15,6 +15,7 @@ workspace = ".." [dependencies] lazy_static = "1" libc = "0.2" +maybe-uninit = "2.0.0" [build-dependencies] pkg-config = "0.3.8" diff --git a/x11-dl/src/lib.rs b/x11-dl/src/lib.rs index cef9ceb..65a89e6 100644 --- a/x11-dl/src/lib.rs +++ b/x11-dl/src/lib.rs @@ -10,6 +10,7 @@ extern crate lazy_static; extern crate libc; +extern crate maybe_uninit; #[macro_use] mod link; diff --git a/x11-dl/src/link.rs b/x11-dl/src/link.rs index bf1c89e..6a8613c 100644 --- a/x11-dl/src/link.rs +++ b/x11-dl/src/link.rs @@ -55,12 +55,11 @@ macro_rules! x11_link { unsafe { let libdir = $crate::link::config::libdir::$pkg_name; let lib = try!($crate::link::DynamicLibrary::open_multi(libdir, &[$($lib_name),*])); - let mut this: ::std::mem::ManuallyDrop<$struct_name> - = ::std::mem::uninitialized(); - let this_ptr = &mut this as *mut _ as *mut $struct_name; + let mut this = ::maybe_uninit::MaybeUninit::<$struct_name>::uninit(); + let this_ptr = this.as_mut_ptr(); ::std::ptr::write(&mut (*this_ptr).lib, lib); try!(Self::init(this_ptr)); - Ok(::std::mem::ManuallyDrop::into_inner(this)) + Ok(this.assume_init()) } } }