From 778884ea966788b103e1a61daf5f801507bc82c8 Mon Sep 17 00:00:00 2001 From: daa Date: Sun, 3 Dec 2017 19:45:38 +0300 Subject: [PATCH] Fix memory leaks (#28) --- src/sys/pango/attr_iterator.rs | 2 +- src/sys/pango/item.rs | 2 +- src/sys/pango/mod.rs | 10 +++++++++- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/sys/pango/attr_iterator.rs b/src/sys/pango/attr_iterator.rs index 6d066a2..7043159 100644 --- a/src/sys/pango/attr_iterator.rs +++ b/src/sys/pango/attr_iterator.rs @@ -23,7 +23,7 @@ pub trait AttrIteratorFactory { impl AttrIteratorFactory for pango::AttrList { fn get_iterator(&self) -> AttrIterator { unsafe { - from_glib_none(pango_sys::pango_attr_list_get_iterator( + from_glib_full(pango_sys::pango_attr_list_get_iterator( self.to_glib_none().0, )) } diff --git a/src/sys/pango/item.rs b/src/sys/pango/item.rs index 26d7d9f..ad5187e 100644 --- a/src/sys/pango/item.rs +++ b/src/sys/pango/item.rs @@ -23,7 +23,7 @@ impl Item { #[cfg(test)] pub fn new() -> Self { unsafe { - from_glib_none(pango_sys::pango_item_new()) + from_glib_full(pango_sys::pango_item_new()) } } diff --git a/src/sys/pango/mod.rs b/src/sys/pango/mod.rs index a67224a..b62ec5f 100644 --- a/src/sys/pango/mod.rs +++ b/src/sys/pango/mod.rs @@ -10,6 +10,7 @@ use std::ptr; use pango; use pango_sys; +use glib_ffi; use glib::translate::*; @@ -22,7 +23,8 @@ pub fn pango_itemize( cached_iter: Option<&mut AttrIterator>, ) -> Vec { unsafe { - FromGlibPtrContainer::from_glib_container(pango_sys::pango_itemize( + //FromGlibPtrContainer::from_glib_full(pango_sys::pango_itemize( + from_glib_full_as_vec(pango_sys::pango_itemize( context.to_glib_none().0, text.as_ptr() as *const i8, start_index as i32, @@ -33,6 +35,12 @@ pub fn pango_itemize( } } + +unsafe fn from_glib_full_as_vec(ptr: *mut glib_ffi::GList) -> Vec { + let num = glib_ffi::g_list_length(ptr) as usize; + FromGlibContainer::from_glib_full_num(ptr, num) +} + pub fn pango_shape( text: &str, offset: usize,