diff options
author | Brian J. Burg <burg@cs.washington.edu> | 2012-09-10 22:35:17 -0700 |
---|---|---|
committer | Brian J. Burg <burg@cs.washington.edu> | 2012-09-10 22:35:17 -0700 |
commit | 1292fa29658e24d96cc146ebc4fc05a26de6b88e (patch) | |
tree | 0bc40ea24c2de45dfde90efaf6fd0efedf4cf7f6 | |
parent | 2d8e764c9d66f93db4f6dbcdc73728c1043a4f02 (diff) | |
download | servo-1292fa29658e24d96cc146ebc4fc05a26de6b88e.tar.gz servo-1292fa29658e24d96cc146ebc4fc05a26de6b88e.zip |
Fix segfault in QuartzNativeFont.create; improve error handling slightly
-rw-r--r-- | src/servo/text/native_font/quartz_native_font.rs | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/src/servo/text/native_font/quartz_native_font.rs b/src/servo/text/native_font/quartz_native_font.rs index 3bcfd92626f..2b70aa94d44 100644 --- a/src/servo/text/native_font/quartz_native_font.rs +++ b/src/servo/text/native_font/quartz_native_font.rs @@ -4,7 +4,6 @@ export QuartzNativeFont, with_test_native_font, create; import libc::size_t; import ptr::null; -import unsafe::reinterpret_cast; import glyph::GlyphIndex; import cocoa::cg::{ CGDataProviderRef, @@ -16,6 +15,7 @@ import cocoa::cg::cg::{ CGFontCreateWithDataProvider, CGFontRelease }; +use unsafe::transmute; mod coretext { @@ -49,7 +49,7 @@ mod coretext { } } -struct QuartzNativeFont/& { +struct QuartzNativeFont { fontprov: CGDataProviderRef, cgfont: CGFontRef, @@ -77,7 +77,7 @@ impl QuartzNativeFont { import coretext::{UniChar, CGGlyph, CFIndex}; import coretext::coretext::{CFRelease, CTFontGetGlyphsForCharacters}; - + let ctfont = ctfont_from_cgfont(self.cgfont); assert ctfont.is_not_null(); let characters: ~[UniChar] = ~[codepoint as UniChar]; @@ -119,7 +119,7 @@ impl QuartzNativeFont { } } -fn ctfont_from_cgfont(+cgfont: CGFontRef) -> coretext::CTFontRef unsafe { +fn ctfont_from_cgfont(cgfont: CGFontRef) -> coretext::CTFontRef { import coretext::CGFloat; import coretext::coretext::CTFontCreateWithGraphicsFont; @@ -131,17 +131,19 @@ fn create(buf: &~[u8]) -> Result<QuartzNativeFont, ()> { let fontprov = vec::as_buf(*buf, |cbuf, len| { CGDataProviderCreateWithData( null(), - unsafe { reinterpret_cast(&cbuf) }, + unsafe { transmute(&cbuf) }, len as size_t, null()) }); // FIXME: Error handling assert fontprov.is_not_null(); let cgfont = CGFontCreateWithDataProvider(fontprov); - // FIXME: Error handling - assert cgfont.is_not_null(); - return Ok(QuartzNativeFont(fontprov, cgfont)); + match cgfont.is_not_null() { + true => Ok(QuartzNativeFont(fontprov, cgfont)), + false => Err(()) + } + } fn with_test_native_font(f: fn@(nf: &NativeFont)) { |