* 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
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.
* 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,
*
* 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.
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.
*
* 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);
/**
* 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;
/**
*/
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);
/**
* @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.
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);
}
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);
{
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;
EAPI void
eina_inarray_free(Eina_Inarray *array)
{
+ if (!inarray)
+ return;
+
EINA_MAGIC_CHECK_INARRAY(array);
free(array->members);
free(array);
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);
}
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);
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);
void *user_data;
Eina_Matrixsparse_Row *r;
+
+ if (!m)
+ return;
+
EINA_MAGIC_CHECK_MATRIXSPARSE(m);
free_func = m->free.func;
EAPI void
eina_model_del(Eina_Model *model)
{
+ if (!model)
+ return;
+
EINA_MODEL_INSTANCE_CHECK(model);
_eina_model_del(model);
_eina_model_unref(model);
EAPI void
eina_simple_xml_attribute_free(Eina_Simple_XML_Attribute *attr)
{
+ if (!attr)
+ return;
+
EINA_MAGIC_CHECK_ATTRIBUTE(attr);
if (attr->parent)
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)
{
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)
{
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)
{
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)
{
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)
{
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)
{
EAPI void eina_tiler_free(Eina_Tiler *t)
{
+ if (!t)
+ return;
+
EINA_MAGIC_CHECK_TILER(t);
_splitter_del(t);
free(t);