summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCedric BAIL <cedric.bail@free.fr>2012-07-05 01:12:27 +0000
committerCedric BAIL <cedric.bail@free.fr>2012-07-05 01:12:27 +0000
commit9a8cc1f78c635d00867c57e5eaf0dc468e18105a (patch)
tree7908f74fdcc92bb87b5d59da8f3da5123d99292a
parent359757c999c9a692d65e88931784e73b26eec4c9 (diff)
downloadeina-9a8cc1f78c635d00867c57e5eaf0dc468e18105a.tar.gz
eina: handle gracefully eina_*_free with NULL.
Patch by Raphael Kubo da Costa <rakuco@freebsd.org>. SVN revision: 73320
-rw-r--r--ChangeLog20
-rw-r--r--NEWS3
-rw-r--r--src/include/eina_accessor.h4
-rw-r--r--src/include/eina_iterator.h6
-rw-r--r--src/include/eina_model.h2
-rw-r--r--src/lib/eina_accessor.c7
-rw-r--r--src/lib/eina_hash.c7
-rw-r--r--src/lib/eina_inarray.c3
-rw-r--r--src/lib/eina_iterator.c9
-rw-r--r--src/lib/eina_matrixsparse.c4
-rw-r--r--src/lib/eina_model.c3
-rw-r--r--src/lib/eina_simple_xml_parser.c21
-rw-r--r--src/lib/eina_tiler.c3
13 files changed, 67 insertions, 25 deletions
diff --git a/ChangeLog b/ChangeLog
index db8b643..2e73efb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
diff --git a/NEWS b/NEWS
index a5360b1..43e827b 100644
--- a/NEWS
+++ b/NEWS
@@ -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,
diff --git a/src/include/eina_accessor.h b/src/include/eina_accessor.h
index 8665bb9..7d52d19 100644
--- a/src/include/eina_accessor.h
+++ b/src/include/eina_accessor.h
@@ -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.
diff --git a/src/include/eina_iterator.h b/src/include/eina_iterator.h
index dd92c90..1f47b6e 100644
--- a/src/include/eina_iterator.h
+++ b/src/include/eina_iterator.h
@@ -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);
/**
diff --git a/src/include/eina_model.h b/src/include/eina_model.h
index 0313b85..892a1d5 100644
--- a/src/include/eina_model.h
+++ b/src/include/eina_model.h
@@ -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.
diff --git a/src/lib/eina_accessor.c b/src/lib/eina_accessor.c
index aec44ef..994704d 100644
--- a/src/lib/eina_accessor.c
+++ b/src/lib/eina_accessor.c
@@ -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);
diff --git a/src/lib/eina_hash.c b/src/lib/eina_hash.c
index 8851f25..821d225 100644
--- a/src/lib/eina_hash.c
+++ b/src/lib/eina_hash.c
@@ -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;
diff --git a/src/lib/eina_inarray.c b/src/lib/eina_inarray.c
index 73ac47d..8e1c4a0 100644
--- a/src/lib/eina_inarray.c
+++ b/src/lib/eina_inarray.c
@@ -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);
diff --git a/src/lib/eina_iterator.c b/src/lib/eina_iterator.c
index db1f253..d035873 100644
--- a/src/lib/eina_iterator.c
+++ b/src/lib/eina_iterator.c
@@ -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);
diff --git a/src/lib/eina_matrixsparse.c b/src/lib/eina_matrixsparse.c
index 9575cec..d287545 100644
--- a/src/lib/eina_matrixsparse.c
+++ b/src/lib/eina_matrixsparse.c
@@ -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;
diff --git a/src/lib/eina_model.c b/src/lib/eina_model.c
index a0cc6de..ee8e3e9 100644
--- a/src/lib/eina_model.c
+++ b/src/lib/eina_model.c
@@ -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);
diff --git a/src/lib/eina_simple_xml_parser.c b/src/lib/eina_simple_xml_parser.c
index ba42a9e..0b83594 100644
--- a/src/lib/eina_simple_xml_parser.c
+++ b/src/lib/eina_simple_xml_parser.c
@@ -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)
{
diff --git a/src/lib/eina_tiler.c b/src/lib/eina_tiler.c
index 69b944e..155b0e0 100644
--- a/src/lib/eina_tiler.c
+++ b/src/lib/eina_tiler.c
@@ -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);