diff options
Diffstat (limited to 'src/util/container_bloomfilter.c')
-rw-r--r-- | src/util/container_bloomfilter.c | 46 |
1 files changed, 21 insertions, 25 deletions
diff --git a/src/util/container_bloomfilter.c b/src/util/container_bloomfilter.c index a0749a18a..ebd056128 100644 --- a/src/util/container_bloomfilter.c +++ b/src/util/container_bloomfilter.c | |||
@@ -102,8 +102,7 @@ struct GNUNET_CONTAINER_BloomFilter * | |||
102 | GNUNET_CONTAINER_bloomfilter_copy (const struct GNUNET_CONTAINER_BloomFilter | 102 | GNUNET_CONTAINER_bloomfilter_copy (const struct GNUNET_CONTAINER_BloomFilter |
103 | *bf) | 103 | *bf) |
104 | { | 104 | { |
105 | return GNUNET_CONTAINER_bloomfilter_init (bf->bitArray, | 105 | return GNUNET_CONTAINER_bloomfilter_init (bf->bitArray, bf->bitArraySize, |
106 | bf->bitArraySize, | ||
107 | bf->addressesPerElement); | 106 | bf->addressesPerElement); |
108 | } | 107 | } |
109 | 108 | ||
@@ -209,9 +208,8 @@ incrementBit (char *bitArray, unsigned int bitIdx, | |||
209 | high++; | 208 | high++; |
210 | } | 209 | } |
211 | value = ((high << 4) | low); | 210 | value = ((high << 4) | low); |
212 | GNUNET_assert (fileSlot == GNUNET_DISK_file_seek (fh, | 211 | GNUNET_assert (fileSlot == |
213 | fileSlot, | 212 | GNUNET_DISK_file_seek (fh, fileSlot, GNUNET_DISK_SEEK_SET)); |
214 | GNUNET_DISK_SEEK_SET)); | ||
215 | GNUNET_assert (1 == GNUNET_DISK_file_write (fh, &value, 1)); | 213 | GNUNET_assert (1 == GNUNET_DISK_file_write (fh, &value, 1)); |
216 | } | 214 | } |
217 | 215 | ||
@@ -348,8 +346,7 @@ iterateBits (const struct GNUNET_CONTAINER_BloomFilter *bf, | |||
348 | { | 346 | { |
349 | while (slot < (sizeof (GNUNET_HashCode) / sizeof (uint32_t))) | 347 | while (slot < (sizeof (GNUNET_HashCode) / sizeof (uint32_t))) |
350 | { | 348 | { |
351 | callback (arg, | 349 | callback (arg, bf, |
352 | bf, | ||
353 | (((uint32_t *) & tmp[round & 1])[slot]) & | 350 | (((uint32_t *) & tmp[round & 1])[slot]) & |
354 | ((bf->bitArraySize * 8) - 1)); | 351 | ((bf->bitArraySize * 8) - 1)); |
355 | slot++; | 352 | slot++; |
@@ -375,8 +372,7 @@ iterateBits (const struct GNUNET_CONTAINER_BloomFilter *bf, | |||
375 | * @param bit the bit to increment | 372 | * @param bit the bit to increment |
376 | */ | 373 | */ |
377 | static void | 374 | static void |
378 | incrementBitCallback (void *cls, | 375 | incrementBitCallback (void *cls, const struct GNUNET_CONTAINER_BloomFilter *bf, |
379 | const struct GNUNET_CONTAINER_BloomFilter *bf, | ||
380 | unsigned int bit) | 376 | unsigned int bit) |
381 | { | 377 | { |
382 | struct GNUNET_CONTAINER_BloomFilter *b = cls; | 378 | struct GNUNET_CONTAINER_BloomFilter *b = cls; |
@@ -392,8 +388,7 @@ incrementBitCallback (void *cls, | |||
392 | * @param bit the bit to decrement | 388 | * @param bit the bit to decrement |
393 | */ | 389 | */ |
394 | static void | 390 | static void |
395 | decrementBitCallback (void *cls, | 391 | decrementBitCallback (void *cls, const struct GNUNET_CONTAINER_BloomFilter *bf, |
396 | const struct GNUNET_CONTAINER_BloomFilter *bf, | ||
397 | unsigned int bit) | 392 | unsigned int bit) |
398 | { | 393 | { |
399 | struct GNUNET_CONTAINER_BloomFilter *b = cls; | 394 | struct GNUNET_CONTAINER_BloomFilter *b = cls; |
@@ -409,8 +404,7 @@ decrementBitCallback (void *cls, | |||
409 | * @param bit the bit to test | 404 | * @param bit the bit to test |
410 | */ | 405 | */ |
411 | static void | 406 | static void |
412 | testBitCallback (void *cls, | 407 | testBitCallback (void *cls, const struct GNUNET_CONTAINER_BloomFilter *bf, |
413 | const struct GNUNET_CONTAINER_BloomFilter *bf, | ||
414 | unsigned int bit) | 408 | unsigned int bit) |
415 | { | 409 | { |
416 | int *arg = cls; | 410 | int *arg = cls; |
@@ -432,8 +426,8 @@ testBitCallback (void *cls, | |||
432 | * @return the bloomfilter | 426 | * @return the bloomfilter |
433 | */ | 427 | */ |
434 | struct GNUNET_CONTAINER_BloomFilter * | 428 | struct GNUNET_CONTAINER_BloomFilter * |
435 | GNUNET_CONTAINER_bloomfilter_load (const char *filename, | 429 | GNUNET_CONTAINER_bloomfilter_load (const char *filename, size_t size, |
436 | size_t size, unsigned int k) | 430 | unsigned int k) |
437 | { | 431 | { |
438 | struct GNUNET_CONTAINER_BloomFilter *bf; | 432 | struct GNUNET_CONTAINER_BloomFilter *bf; |
439 | char *rbuff; | 433 | char *rbuff; |
@@ -453,10 +447,12 @@ GNUNET_CONTAINER_bloomfilter_load (const char *filename, | |||
453 | 447 | ||
454 | bf = GNUNET_malloc (sizeof (struct GNUNET_CONTAINER_BloomFilter)); | 448 | bf = GNUNET_malloc (sizeof (struct GNUNET_CONTAINER_BloomFilter)); |
455 | /* Try to open a bloomfilter file */ | 449 | /* Try to open a bloomfilter file */ |
456 | bf->fh = GNUNET_DISK_file_open (filename, GNUNET_DISK_OPEN_READWRITE | 450 | bf->fh = |
457 | | GNUNET_DISK_OPEN_CREATE, | 451 | GNUNET_DISK_file_open (filename, |
458 | GNUNET_DISK_PERM_USER_READ | | 452 | GNUNET_DISK_OPEN_READWRITE | |
459 | GNUNET_DISK_PERM_USER_WRITE); | 453 | GNUNET_DISK_OPEN_CREATE, |
454 | GNUNET_DISK_PERM_USER_READ | | ||
455 | GNUNET_DISK_PERM_USER_WRITE); | ||
460 | if (NULL == bf->fh) | 456 | if (NULL == bf->fh) |
461 | { | 457 | { |
462 | GNUNET_free (bf); | 458 | GNUNET_free (bf); |
@@ -487,8 +483,8 @@ GNUNET_CONTAINER_bloomfilter_load (const char *filename, | |||
487 | res = GNUNET_DISK_file_read (bf->fh, rbuff, BUFFSIZE); | 483 | res = GNUNET_DISK_file_read (bf->fh, rbuff, BUFFSIZE); |
488 | if (res == -1) | 484 | if (res == -1) |
489 | { | 485 | { |
490 | GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_WARNING, | 486 | GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_WARNING, "read", |
491 | "read", bf->filename); | 487 | bf->filename); |
492 | } | 488 | } |
493 | if (res == 0) | 489 | if (res == 0) |
494 | break; /* is ok! we just did not use that many bits yet */ | 490 | break; /* is ok! we just did not use that many bits yet */ |
@@ -522,8 +518,8 @@ GNUNET_CONTAINER_bloomfilter_load (const char *filename, | |||
522 | * @return the bloomfilter | 518 | * @return the bloomfilter |
523 | */ | 519 | */ |
524 | struct GNUNET_CONTAINER_BloomFilter * | 520 | struct GNUNET_CONTAINER_BloomFilter * |
525 | GNUNET_CONTAINER_bloomfilter_init (const char *data, | 521 | GNUNET_CONTAINER_bloomfilter_init (const char *data, size_t size, |
526 | size_t size, unsigned int k) | 522 | unsigned int k) |
527 | { | 523 | { |
528 | struct GNUNET_CONTAINER_BloomFilter *bf; | 524 | struct GNUNET_CONTAINER_BloomFilter *bf; |
529 | size_t ui; | 525 | size_t ui; |
@@ -752,8 +748,8 @@ GNUNET_CONTAINER_bloomfilter_remove (struct GNUNET_CONTAINER_BloomFilter *bf, | |||
752 | void | 748 | void |
753 | GNUNET_CONTAINER_bloomfilter_resize (struct GNUNET_CONTAINER_BloomFilter *bf, | 749 | GNUNET_CONTAINER_bloomfilter_resize (struct GNUNET_CONTAINER_BloomFilter *bf, |
754 | GNUNET_HashCodeIterator iterator, | 750 | GNUNET_HashCodeIterator iterator, |
755 | void *iterator_cls, | 751 | void *iterator_cls, size_t size, |
756 | size_t size, unsigned int k) | 752 | unsigned int k) |
757 | { | 753 | { |
758 | GNUNET_HashCode hc; | 754 | GNUNET_HashCode hc; |
759 | unsigned int i; | 755 | unsigned int i; |