From 9a71cf14031889e33fff8d116e94b1309320d4e9 Mon Sep 17 00:00:00 2001 From: Glenn Watson Date: Mon, 14 Jul 2014 16:01:41 +1000 Subject: [PATCH] from_data_provider now returns result indicating success. --- font.rs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/font.rs b/font.rs index f4cab76..03a20d8 100644 --- a/font.rs +++ b/font.rs @@ -12,6 +12,7 @@ use data_provider::{CGDataProvider, CGDataProviderRef}; use libc; use std::mem; +use std::ptr; pub type CGGlyph = libc::c_ushort; @@ -35,7 +36,9 @@ impl Clone for CGFont { impl Drop for CGFont { fn drop(&mut self) { unsafe { - CFRelease(self.as_CFTypeRef()) + let ptr = self.as_CFTypeRef(); + assert!(ptr != ptr::null()); + CFRelease(ptr); } } } @@ -75,10 +78,14 @@ impl TCFType for CGFont { } impl CGFont { - pub fn from_data_provider(provider: CGDataProvider) -> CGFont { + pub fn from_data_provider(provider: CGDataProvider) -> Result { unsafe { let font_ref = CGFontCreateWithDataProvider(provider.as_concrete_TypeRef()); - TCFType::wrap_under_create_rule(font_ref) + if font_ref != ptr::null() { + Ok(TCFType::wrap_under_create_rule(font_ref)) + } else { + Err(()) + } } } }