Cedric BAIL <[email protected]> writes:
>>>> - *_foreach():
>>>> One could argue that passing NULL should be equivalent to an empty
>>>> loop. For example, right now
>>>> eina_iterator_foreach(NULL, ..., ...)
>>>> generates a magic check error message, while
>>>> EINA_ITERATOR_FOREACH(NULL, ...)
>>>> does not.
>
> There is valid use case for when an iterator could be NULL. If you do :
> it = eina_file_stat_ls("/plop");
> EINA_ITERATOR_FOREACH(it, ...)
> {
> ....
> }
> eina_iterator_free(it);
>
> It cleary simplify the code in my opinion without impacting speed at
> all if we do handle it == NULL case. So for this one I would like to
> have it handle.
That's exactly what caused me to look into this :-) I've changed
eina_iterator_foreach() so that it just returns early without
complaining if a NULL iterator is passed to it, so both
eina_iterator_free() and EINA_ITERATOR_FREE() should have a more similar
behavior now.
Index: src/lib/eina_hash.c
===================================================================
--- src/lib/eina_hash.c (revision 73186)
+++ src/lib/eina_hash.c (working copy)
@@ -485,13 +485,10 @@ _eina_hash_del_by_key(Eina_Hash *hash, const void
{
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;
Index: src/lib/eina_accessor.c
===================================================================
--- src/lib/eina_accessor.c (revision 73186)
+++ src/lib/eina_accessor.c (working copy)
@@ -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);
}
Index: src/lib/eina_inarray.c
===================================================================
--- src/lib/eina_inarray.c (revision 73186)
+++ src/lib/eina_inarray.c (working copy)
@@ -355,6 +355,9 @@ eina_inarray_new(unsigned int member_size, unsigne
EAPI void
eina_inarray_free(Eina_Inarray *array)
{
+ if (!inarray)
+ return;
+
EINA_MAGIC_CHECK_INARRAY(array);
free(array->members);
free(array);
Index: src/lib/eina_matrixsparse.c
===================================================================
--- src/lib/eina_matrixsparse.c (revision 73186)
+++ src/lib/eina_matrixsparse.c (working copy)
@@ -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;
Index: src/lib/eina_model.c
===================================================================
--- src/lib/eina_model.c (revision 73186)
+++ src/lib/eina_model.c (working copy)
@@ -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);
Index: src/lib/eina_tiler.c
===================================================================
--- src/lib/eina_tiler.c (revision 73186)
+++ src/lib/eina_tiler.c (working copy)
@@ -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);
@@ -1165,6 +1168,9 @@ EAPI void eina_tiler_rect_del(Eina_Tiler *t, const
{
Eina_Rectangle tmp;
+ if (!t)
+ return;
+
EINA_MAGIC_CHECK_TILER(t);
if ((r->w <= 0) || (r->h <= 0))
return;
Index: src/lib/eina_simple_xml_parser.c
===================================================================
--- src/lib/eina_simple_xml_parser.c (revision 73186)
+++ src/lib/eina_simple_xml_parser.c (working copy)
@@ -585,6 +585,9 @@ eina_simple_xml_attribute_new(Eina_Simple_XML_Node
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_Nod
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
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_Nod
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_XM
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_N
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_N
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)
{
Index: src/lib/eina_iterator.c
===================================================================
--- src/lib/eina_iterator.c (revision 73186)
+++ src/lib/eina_iterator.c (working copy)
@@ -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 *
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);
------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and
threat landscape has changed and how IT managers can respond. Discussions
will include endpoint security, mobile security and the latest in malware
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
enlightenment-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel