diff --git a/components/gfx/platform/freetype/font_context.rs b/components/gfx/platform/freetype/font_context.rs index 313e02f022e..c60c6bf5e36 100644 --- a/components/gfx/platform/freetype/font_context.rs +++ b/components/gfx/platform/freetype/font_context.rs @@ -13,9 +13,7 @@ use freetype::freetype::struct_FT_MemoryRec_; use std::ptr; use std::rc::Rc; -use libc; -use libc::{c_void, c_long, size_t, malloc}; -use std::mem; +use libc::{self, c_void, c_long, size_t}; extern fn ft_alloc(_mem: FT_Memory, size: c_long) -> *mut c_void { unsafe { @@ -40,6 +38,17 @@ extern fn ft_realloc(_mem: FT_Memory, _cur_size: c_long, new_size: c_long, block #[derive(Clone)] pub struct FreeTypeLibraryHandle { pub ctx: FT_Library, + pub mem: FT_Memory, +} + +impl Drop for FreeTypeLibraryHandle { + fn drop(&mut self) { + assert!(!self.ctx.is_null()); + unsafe { + FT_Done_Library(self.ctx); + Box::from_raw(self.mem); + } + } } #[derive(Clone)] @@ -47,35 +56,25 @@ pub struct FontContextHandle { pub ctx: Rc, } -impl Drop for FreeTypeLibraryHandle { - fn drop(&mut self) { - assert!(!self.ctx.is_null()); - unsafe { FT_Done_Library(self.ctx) }; - } -} - impl FontContextHandle { pub fn new() -> FontContextHandle { + let mem = box struct_FT_MemoryRec_ { + user: ptr::null_mut(), + alloc: ft_alloc, + free: ft_free, + realloc: ft_realloc, + }; unsafe { - - let ptr = libc::malloc(mem::size_of::() as size_t); - let allocator: &mut struct_FT_MemoryRec_ = mem::transmute(ptr); - ptr::write(allocator, struct_FT_MemoryRec_ { - user: ptr::null_mut(), - alloc: ft_alloc, - free: ft_free, - realloc: ft_realloc, - }); - let mut ctx: FT_Library = ptr::null_mut(); - let result = FT_New_Library(ptr as FT_Memory, &mut ctx); + let mem = ::std::boxed::into_raw(mem); + let result = FT_New_Library(mem, &mut ctx); if !result.succeeded() { panic!("Unable to initialize FreeType library"); } FT_Add_Default_Modules(ctx); FontContextHandle { - ctx: Rc::new(FreeTypeLibraryHandle { ctx: ctx }), + ctx: Rc::new(FreeTypeLibraryHandle { ctx: ctx, mem: mem }), } } } diff --git a/components/servo/Cargo.lock b/components/servo/Cargo.lock index b6a757d6513..171d9edebb4 100644 --- a/components/servo/Cargo.lock +++ b/components/servo/Cargo.lock @@ -479,6 +479,7 @@ dependencies = [ "layers 0.1.0 (git+https://github.com/servo/rust-layers)", "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", "msg 0.0.1", + "net 0.0.1", "script_traits 0.0.1", "time 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)", "url 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)",