Returns now GNUNET_SYSERR
[oweals/gnunet.git] / src / util / container_multihashmap.c
index 2c88b1a52aa95dbfe85c6b99920325a7502f0b6e..b5f663e67b18b2e5935651f0307ba1cb114b48bf 100644 (file)
@@ -85,6 +85,7 @@ GNUNET_CONTAINER_multihashmap_create (unsigned int len)
 {
   struct GNUNET_CONTAINER_MultiHashMap *ret;
 
+  GNUNET_assert (len > 0);
   ret = GNUNET_malloc (sizeof (struct GNUNET_CONTAINER_MultiHashMap));
   ret->map = GNUNET_malloc (len * sizeof (struct MapEntry *));
   ret->map_length = len;
@@ -129,6 +130,7 @@ static unsigned int
 idx_of (const struct GNUNET_CONTAINER_MultiHashMap *m,
         const GNUNET_HashCode * key)
 {
+  GNUNET_assert (m!=NULL);
   return (*(unsigned int *) key) % m->map_length;
 }
 
@@ -192,18 +194,24 @@ GNUNET_CONTAINER_multihashmap_iterate (const struct
   int count;
   unsigned int i;
   struct MapEntry *e;
+  struct MapEntry *n;
+  GNUNET_HashCode kc;
 
   count = 0;
+  GNUNET_assert(map != NULL);
   for (i = 0; i < map->map_length; i++)
     {
-      e = map->map[i];
-      while (e != NULL)
+      n = map->map[i];
+      while (NULL != (e = n))
         {
-          if ( (NULL != it) && 
-              (GNUNET_OK != it (it_cls, &e->key, e->value)) )
-            return GNUNET_SYSERR;
+         n = e->next;
+          if (NULL != it)
+           {
+             kc = e->key;
+             if (GNUNET_OK != it (it_cls, &kc, e->value))
+               return GNUNET_SYSERR;
+           }
           count++;
-          e = e->next;
         }
     }
   return count;
@@ -235,8 +243,8 @@ GNUNET_CONTAINER_multihashmap_remove (struct GNUNET_CONTAINER_MultiHashMap
   e = map->map[i];
   while (e != NULL)
     {
-      if ( (0 == memcmp (key, &e->key, sizeof (GNUNET_HashCode))) &&
-          (value == e->value))
+      if ((0 == memcmp (key, &e->key, sizeof (GNUNET_HashCode))) &&
+          (value == e->value))
         {
           if (p == NULL)
             map->map[i] = e->next;
@@ -354,7 +362,7 @@ grow (struct GNUNET_CONTAINER_MultiHashMap *map)
       while (NULL != (e = old_map[i]))
         {
           old_map[i] = e->next;
-         idx = idx_of (map, &e->key);
+          idx = idx_of (map, &e->key);
           e->next = new_map[idx];
           new_map[idx] = e;
         }
@@ -386,8 +394,8 @@ GNUNET_CONTAINER_multihashmap_put (struct GNUNET_CONTAINER_MultiHashMap *map,
   unsigned int i;
 
   i = idx_of (map, key);
-  if ( (opt != GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE) &&
-       (opt != GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST) )
+  if ((opt != GNUNET_CONTAINER_MULTIHASHMAPOPTION_MULTIPLE) &&
+      (opt != GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST))
     {
       e = map->map[i];
       while (e != NULL)
@@ -405,7 +413,7 @@ GNUNET_CONTAINER_multihashmap_put (struct GNUNET_CONTAINER_MultiHashMap *map,
   if (map->size / 3 >= map->map_length / 4)
     {
       grow (map);
-      i = idx_of (map, key);  
+      i = idx_of (map, key);
     }
   e = GNUNET_malloc (sizeof (struct MapEntry));
   e->key = *key;
@@ -436,19 +444,18 @@ GNUNET_CONTAINER_multihashmap_get_multiple (const struct
 {
   int count;
   struct MapEntry *e;
+  struct MapEntry *n;
 
   count = 0;
-  e = map->map[idx_of (map, key)];
-  while (e != NULL)
+  n = map->map[idx_of (map, key)];
+  while (NULL != (e = n))
     {
-      if (0 == memcmp (key, &e->key, sizeof (GNUNET_HashCode)))
-        {
-          if ( (it != NULL) && 
-              (GNUNET_OK != it (it_cls, &e->key, e->value)) )
-            return GNUNET_SYSERR;
-          count++;
-        }
-      e = e->next;
+      n = e->next;
+      if (0 != memcmp (key, &e->key, sizeof (GNUNET_HashCode)))
+       continue;
+      if ((it != NULL) && (GNUNET_OK != it (it_cls, key, e->value)))
+       return GNUNET_SYSERR;
+      count++;
     }
   return count;
 }