and when deleting a hash item - if hash data != NULL delete EXACTLY that
authorraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Fri, 19 Sep 2008 09:36:48 +0000 (09:36 +0000)
committerraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Fri, 19 Sep 2008 09:36:48 +0000 (09:36 +0000)
entry (if there are duplicates... this will avoid removing the wrong one)

git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/evas@36092 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/data/evas_hash.c

index 9d36648..17a0baa 100644 (file)
@@ -249,15 +249,18 @@ evas_hash_del(Evas_Hash *hash, const char *key, const void *data)
             el = (Evas_Hash_El *)l;
             if (!strcmp(el->key, key))
               {
-                 hash->buckets[hash_num] = evas_object_list_remove(hash->buckets[hash_num], el);
-                 free(el);
-                 hash->population--;
-                 if (hash->population <= 0)
+                  if ((!data) || (el->data == data))
                    {
-                      free(hash);
-                      hash = NULL;
+                      hash->buckets[hash_num] = evas_object_list_remove(hash->buckets[hash_num], el);
+                      free(el);
+                      hash->population--;
+                      if (hash->population <= 0)
+                        {
+                           free(hash);
+                           hash = NULL;
+                        }
+                      return hash;
                    }
-                 return hash;
               }
          }
      }