diff --git a/legacy/eina/ChangeLog b/legacy/eina/ChangeLog index db8b643790..2e73efba5d 100644 --- a/legacy/eina/ChangeLog +++ b/legacy/eina/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/legacy/eina/NEWS b/legacy/eina/NEWS index a5360b1909..43e827b249 100644 --- a/legacy/eina/NEWS +++ b/legacy/eina/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/legacy/eina/src/include/eina_accessor.h b/legacy/eina/src/include/eina_accessor.h index 8665bb97ba..7d52d19123 100644 --- a/legacy/eina/src/include/eina_accessor.h +++ b/legacy/eina/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/legacy/eina/src/include/eina_iterator.h b/legacy/eina/src/include/eina_iterator.h index dd92c90594..1f47b6e3e6 100644 --- a/legacy/eina/src/include/eina_iterator.h +++ b/legacy/eina/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/legacy/eina/src/include/eina_model.h b/legacy/eina/src/include/eina_model.h index 0313b85086..892a1d5ab3 100644 --- a/legacy/eina/src/include/eina_model.h +++ b/legacy/eina/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/legacy/eina/src/lib/eina_accessor.c b/legacy/eina/src/lib/eina_accessor.c index aec44ef9ca..994704dba9 100644 --- a/legacy/eina/src/lib/eina_accessor.c +++ b/legacy/eina/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/legacy/eina/src/lib/eina_hash.c b/legacy/eina/src/lib/eina_hash.c index 8851f25398..821d2254d6 100644 --- a/legacy/eina/src/lib/eina_hash.c +++ b/legacy/eina/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/legacy/eina/src/lib/eina_inarray.c b/legacy/eina/src/lib/eina_inarray.c index 73ac47d936..8e1c4a056a 100644 --- a/legacy/eina/src/lib/eina_inarray.c +++ b/legacy/eina/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/legacy/eina/src/lib/eina_iterator.c b/legacy/eina/src/lib/eina_iterator.c index db1f253996..d035873f73 100644 --- a/legacy/eina/src/lib/eina_iterator.c +++ b/legacy/eina/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/legacy/eina/src/lib/eina_matrixsparse.c b/legacy/eina/src/lib/eina_matrixsparse.c index 9575cec66d..d287545136 100644 --- a/legacy/eina/src/lib/eina_matrixsparse.c +++ b/legacy/eina/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/legacy/eina/src/lib/eina_model.c b/legacy/eina/src/lib/eina_model.c index a0cc6ded3c..ee8e3e978b 100644 --- a/legacy/eina/src/lib/eina_model.c +++ b/legacy/eina/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/legacy/eina/src/lib/eina_simple_xml_parser.c b/legacy/eina/src/lib/eina_simple_xml_parser.c index ba42a9edc4..0b83594d5f 100644 --- a/legacy/eina/src/lib/eina_simple_xml_parser.c +++ b/legacy/eina/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/legacy/eina/src/lib/eina_tiler.c b/legacy/eina/src/lib/eina_tiler.c index 69b944eeec..155b0e0037 100644 --- a/legacy/eina/src/lib/eina_tiler.c +++ b/legacy/eina/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);