X-Git-Url: https://git.ozlabs.org/?a=blobdiff_plain;f=ccan%2Fhtable%2Fhtable.c;h=283ba3d7f1f41855370518c355d785f948794bc3;hb=9a9d6a03d99f05f3158df8520c5338324fd74c49;hp=cffd0619d338d8146365abd3f10e1b308ef4c4d4;hpb=209a81909942a07cb334d6dcae7626a3ecde141d;p=ccan diff --git a/ccan/htable/htable.c b/ccan/htable/htable.c index cffd0619..283ba3d7 100644 --- a/ccan/htable/htable.c +++ b/ccan/htable/htable.c @@ -195,7 +195,7 @@ void *htable_prev_(const struct htable *ht, struct htable_iter *i) for (;;) { if (!i->off) return NULL; - i->off --; + i->off--; if (entry_is_valid(ht->table[i->off])) return get_raw_ptr(ht, ht->table[i->off]); } @@ -287,16 +287,7 @@ static COLD void update_common(struct htable *ht, const void *p) uintptr_t maskdiff, bitsdiff; if (ht->elems == 0) { - /* Always reveal one bit of the pointer in the bucket, - * so it's not zero or HTABLE_DELETED (1), even if - * hash happens to be 0. Assumes (void *)1 is not a - * valid pointer. */ - for (i = sizeof(uintptr_t)*CHAR_BIT - 1; i > 0; i--) { - if ((uintptr_t)p & ((uintptr_t)1 << i)) - break; - } - - ht->common_mask = ~((uintptr_t)1 << i); + ht->common_mask = -1; ht->common_bits = ((uintptr_t)p & ht->common_mask); ht->perfect_bitnum = 0; (void)htable_debug(ht, HTABLE_LOC);