aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian J. Burg <burg@cs.washington.edu>2012-09-10 22:35:17 -0700
committerBrian J. Burg <burg@cs.washington.edu>2012-09-10 22:35:17 -0700
commit1292fa29658e24d96cc146ebc4fc05a26de6b88e (patch)
tree0bc40ea24c2de45dfde90efaf6fd0efedf4cf7f6
parent2d8e764c9d66f93db4f6dbcdc73728c1043a4f02 (diff)
downloadservo-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.rs18
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)) {