eina: handle gracefully eina_*_free with NULL.

Patch by Raphael Kubo da Costa <rakuco@freebsd.org>.



SVN revision: 73320
This commit is contained in:
Cedric BAIL 2012-07-05 01:12:27 +00:00
parent 60ded53507
commit d8ad05920b
13 changed files with 67 additions and 25 deletions

View File

@ -280,12 +280,12 @@
* Fix portability issue of Eina_Value on ARM and PPC.
* Fix portability issue of Eina_Value test on Itanium.
2012-05-23 Carsten Haitzler (The Rasterman)
2012-05-23 Carsten Haitzler (The Rasterman)
* Fix global_faulty faulty flag in eina_file to be set to 0
initially rather than be random memory garbage.
2012-05-29 Vincent Torri
2012-05-29 Vincent Torri
* remove --disable-posix-threads and --disable-win32-threads
from configure options, and detect automatically the threading
@ -293,20 +293,24 @@
Fix bug in the XML parser when a tag was in a comment or a
cdata
2012-06-08 Mike Blumenkrantz
2012-06-08 Mike Blumenkrantz
* Fixed eina_str_split_full() to behave properly and be much faster
2012-06-17 Carsten Haitzler (The Rasterman)
2012-06-17 Carsten Haitzler (The Rasterman)
* Add env var EINA_MEMPOOL_PASS to force mempool to try use
passthrough to malloc for debgging purposes and memory footrpint
comparisons at runtime.
2012-07-01 Vincent Torri
2012-07-01 Vincent Torri
* remove --enable-coverage from configure options,
* Remove --enable-coverage from configure options,
2012-07-04 Vincent Torri
2012-07-04 Vincent Torri
* implement eina_file_map_lines() on Windows
* Implement eina_file_map_lines() on Windows.
2012-07-05 Raphael Kubo da Costa
* Handle NULL in all eina_*_free function.

View File

@ -15,7 +15,8 @@ Fixes:
* Portability issue with Eina_Value test suite when unsigned where not promoted to
unsigned long (case on Itanium).
* Fix issue in the XML parser when a tag was in a comment or a CDATA.
* Implement eina_file_map_lines() on Windows
* Implement eina_file_map_lines() on Windows.
* Handle NULL in all eina_*_free function.
Removal:
* configure options: --disable-posix-threads, --disable-win32-threads,

View File

@ -191,7 +191,7 @@ struct _Eina_Accessor
*
* This function frees @p accessor if it is not @c NULL;
*/
EAPI void eina_accessor_free(Eina_Accessor *accessor) EINA_ARG_NONNULL(1);
EAPI void eina_accessor_free(Eina_Accessor *accessor);
/**
* @brief Retrieve the data of an accessor at a given position.
@ -241,7 +241,7 @@ EAPI void eina_accessor_over(Eina_Accessor *accessor,
Eina_Each_Cb cb,
unsigned int start,
unsigned int end,
const void *fdata) EINA_ARG_NONNULL(1, 2);
const void *fdata) EINA_ARG_NONNULL(2);
/**
* @brief Lock the container of the accessor.

View File

@ -196,7 +196,7 @@ struct _Eina_Iterator
*
* This function frees @p iterator if it is not @c NULL;
*/
EAPI void eina_iterator_free(Eina_Iterator *iterator) EINA_ARG_NONNULL(1);
EAPI void eina_iterator_free(Eina_Iterator *iterator);
/**
@ -223,7 +223,7 @@ EAPI void *eina_iterator_container_get(Eina_Iterator *iterator) EINA_ARG_NON
* returned, otherwise #EINA_TRUE is returned.
*/
EAPI Eina_Bool eina_iterator_next(Eina_Iterator *iterator,
void **data) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT;
void **data) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT;
/**
@ -242,7 +242,7 @@ EAPI Eina_Bool eina_iterator_next(Eina_Iterator *iterator,
*/
EAPI void eina_iterator_foreach(Eina_Iterator *iterator,
Eina_Each_Cb callback,
const void *fdata) EINA_ARG_NONNULL(1, 2);
const void *fdata) EINA_ARG_NONNULL(2);
/**

View File

@ -385,7 +385,7 @@ EAPI Eina_Model *eina_model_new(const Eina_Model_Type *type);
* @see eina_model_new()
* @since 1.2
*/
EAPI void eina_model_del(Eina_Model *model) EINA_ARG_NONNULL(1);
EAPI void eina_model_del(Eina_Model *model);
/**
* @brief Returns the type of @a model.

View File

@ -95,8 +95,10 @@ eina_accessor_shutdown(void)
EAPI void
eina_accessor_free(Eina_Accessor *accessor)
{
if (!accessor)
return;
EINA_MAGIC_CHECK_ACCESSOR(accessor);
EINA_SAFETY_ON_NULL_RETURN(accessor);
EINA_SAFETY_ON_NULL_RETURN(accessor->free);
accessor->free(accessor);
}
@ -133,8 +135,9 @@ eina_accessor_over(Eina_Accessor *accessor,
void *data;
unsigned int i;
if (!accessor) return ;
EINA_MAGIC_CHECK_ACCESSOR(accessor);
EINA_SAFETY_ON_NULL_RETURN(accessor);
EINA_SAFETY_ON_NULL_RETURN(accessor->get_container);
EINA_SAFETY_ON_NULL_RETURN(accessor->get_at);
EINA_SAFETY_ON_NULL_RETURN(cb);

View File

@ -485,12 +485,9 @@ _eina_hash_del_by_key(Eina_Hash *hash, const void *key, const void *data)
{
int key_length, key_hash;
EINA_SAFETY_ON_NULL_RETURN_VAL(hash, EINA_FALSE);
EINA_SAFETY_ON_NULL_RETURN_VAL(key, EINA_FALSE);
EINA_MAGIC_CHECK_HASH(hash);
if (!hash)
return EINA_FALSE;
if (!key)
return EINA_FALSE;
if (!hash->buckets)
return EINA_FALSE;

View File

@ -355,6 +355,9 @@ eina_inarray_new(unsigned int member_size, unsigned int step)
EAPI void
eina_inarray_free(Eina_Inarray *array)
{
if (!inarray)
return;
EINA_MAGIC_CHECK_INARRAY(array);
free(array->members);
free(array);

View File

@ -95,8 +95,10 @@ eina_iterator_shutdown(void)
EAPI void
eina_iterator_free(Eina_Iterator *iterator)
{
if (!iterator)
return;
EINA_MAGIC_CHECK_ITERATOR(iterator);
EINA_SAFETY_ON_NULL_RETURN(iterator);
EINA_SAFETY_ON_NULL_RETURN(iterator->free);
iterator->free(iterator);
}
@ -117,7 +119,6 @@ eina_iterator_next(Eina_Iterator *iterator, void **data)
return EINA_FALSE;
EINA_MAGIC_CHECK_ITERATOR(iterator);
EINA_SAFETY_ON_NULL_RETURN_VAL(iterator, EINA_FALSE);
EINA_SAFETY_ON_NULL_RETURN_VAL(iterator->next, EINA_FALSE);
EINA_SAFETY_ON_NULL_RETURN_VAL(data, EINA_FALSE);
return iterator->next(iterator, data);
@ -131,8 +132,10 @@ eina_iterator_foreach(Eina_Iterator *iterator,
const void *container;
void *data;
if (!iterator)
return;
EINA_MAGIC_CHECK_ITERATOR(iterator);
EINA_SAFETY_ON_NULL_RETURN(iterator);
EINA_SAFETY_ON_NULL_RETURN(iterator->get_container);
EINA_SAFETY_ON_NULL_RETURN(iterator->next);
EINA_SAFETY_ON_NULL_RETURN(cb);

View File

@ -971,6 +971,10 @@ eina_matrixsparse_free(Eina_Matrixsparse *m)
void *user_data;
Eina_Matrixsparse_Row *r;
if (!m)
return;
EINA_MAGIC_CHECK_MATRIXSPARSE(m);
free_func = m->free.func;

View File

@ -3527,6 +3527,9 @@ _eina_model_unref(Eina_Model *model)
EAPI void
eina_model_del(Eina_Model *model)
{
if (!model)
return;
EINA_MODEL_INSTANCE_CHECK(model);
_eina_model_del(model);
_eina_model_unref(model);

View File

@ -585,6 +585,9 @@ eina_simple_xml_attribute_new(Eina_Simple_XML_Node_Tag *parent, const char *key,
EAPI void
eina_simple_xml_attribute_free(Eina_Simple_XML_Attribute *attr)
{
if (!attr)
return;
EINA_MAGIC_CHECK_ATTRIBUTE(attr);
if (attr->parent)
@ -669,6 +672,9 @@ _eina_simple_xml_node_tag_free(Eina_Simple_XML_Node_Tag *tag)
EAPI void
eina_simple_xml_node_tag_free(Eina_Simple_XML_Node_Tag *tag)
{
if (!tag)
return;
EINA_MAGIC_CHECK_TAG(&tag->base);
if (tag->base.type != EINA_SIMPLE_XML_NODE_TAG)
{
@ -716,6 +722,9 @@ eina_simple_xml_node_data_new(Eina_Simple_XML_Node_Tag *parent, const char *cont
EAPI void
eina_simple_xml_node_data_free(Eina_Simple_XML_Node_Data *node)
{
if (!node)
return;
EINA_MAGIC_CHECK_DATA(&node->base);
if (node->base.type != EINA_SIMPLE_XML_NODE_DATA)
{
@ -735,6 +744,9 @@ eina_simple_xml_node_cdata_new(Eina_Simple_XML_Node_Tag *parent, const char *con
EAPI void
eina_simple_xml_node_cdata_free(Eina_Simple_XML_Node_Data *node)
{
if (!node)
return;
EINA_MAGIC_CHECK_DATA(&node->base);
if (node->base.type != EINA_SIMPLE_XML_NODE_CDATA)
{
@ -754,6 +766,9 @@ eina_simple_xml_node_processing_new(Eina_Simple_XML_Node_Tag *parent, const char
EAPI void
eina_simple_xml_node_processing_free(Eina_Simple_XML_Node_Data *node)
{
if (!node)
return;
EINA_MAGIC_CHECK_DATA(&node->base);
if (node->base.type != EINA_SIMPLE_XML_NODE_PROCESSING)
{
@ -773,6 +788,9 @@ eina_simple_xml_node_doctype_new(Eina_Simple_XML_Node_Tag *parent, const char *c
EAPI void
eina_simple_xml_node_doctype_free(Eina_Simple_XML_Node_Data *node)
{
if (!node)
return;
EINA_MAGIC_CHECK_DATA(&node->base);
if (node->base.type != EINA_SIMPLE_XML_NODE_DOCTYPE)
{
@ -792,6 +810,9 @@ eina_simple_xml_node_comment_new(Eina_Simple_XML_Node_Tag *parent, const char *c
EAPI void
eina_simple_xml_node_comment_free(Eina_Simple_XML_Node_Data *node)
{
if (!node)
return;
EINA_MAGIC_CHECK_DATA(&node->base);
if (node->base.type != EINA_SIMPLE_XML_NODE_COMMENT)
{

View File

@ -1127,6 +1127,9 @@ EAPI Eina_Tiler *eina_tiler_new(int w, int h)
EAPI void eina_tiler_free(Eina_Tiler *t)
{
if (!t)
return;
EINA_MAGIC_CHECK_TILER(t);
_splitter_del(t);
free(t);