-indentation, code cleanup
[oweals/gnunet.git] / src / set / strata_estimator.c
index 024bb99c65222b2e20944da20685ad8ee3ea72a6..0f92ea4d98a5a7eeb21be7b3f28dbc98a8adc0d0 100644 (file)
@@ -4,7 +4,7 @@
 
       GNUnet is free software; you can redistribute it and/or modify
       it under the terms of the GNU General Public License as published
-      by the Free Software Foundation; either version 2, or (at your
+      by the Free Software Foundation; either version 3, or (at your
       option) any later version.
 
       GNUnet is distributed in the hope that it will be useful, but
 */
 
 /**
- * @file consensus/ibf.h
+ * @file set/ibf.h
  * @brief invertible bloom filter
  * @author Florian Dold
  */
 
 #include "platform.h"
-#include "gnunet_common.h"
+#include "gnunet_util_lib.h"
 #include "ibf.h"
 #include "strata_estimator.h"
 
@@ -109,25 +109,25 @@ strata_estimator_difference (const struct StrataEstimator *se1,
     struct InvertibleBloomFilter *diff;
     /* number of keys decoded from the ibf */
     int ibf_count;
-    int more;
-    ibf_count = 0;
     /* FIXME: implement this without always allocating new IBFs */
     diff = ibf_dup (se1->strata[i]);
     ibf_subtract (diff, se2->strata[i]);
-    for (;;)
+    for (ibf_count = 0; GNUNET_YES; ibf_count++)
     {
+      int more;
+
       more = ibf_decode (diff, NULL, NULL);
       if (GNUNET_NO == more)
       {
         count += ibf_count;
         break;
       }
-      if (GNUNET_SYSERR == more)
+      /* Estimate if decoding fails or would not terminate */
+      if ((GNUNET_SYSERR == more) || (ibf_count > diff->size))
       {
         ibf_destroy (diff);
         return count * (1 << (i + 1));
       }
-      ibf_count++;
     }
     ibf_destroy (diff);
   }