From: Brendan Hansen Date: Thu, 14 May 2020 17:23:31 +0000 (-0500) Subject: Small fixes to safety of hash iterator X-Git-Url: https://git.brendanfh.com/?a=commitdiff_plain;h=d59ec89d838ae14330e03c4dc11a596b56970975;p=onyx.git Small fixes to safety of hash iterator --- diff --git a/bh.h b/bh.h index da236743..e0f20b2b 100644 --- a/bh.h +++ b/bh.h @@ -276,6 +276,10 @@ typedef struct bh_hash_iterator { #define bh_hash_has(T, tab, key) (assert(sizeof(T) == sizeof(*(tab))), (bh__hash_has((ptr *) tab, sizeof(T), key))) #define bh_hash_get(T, tab, key) (assert(sizeof(T) == sizeof(*(tab))), (*((T *) bh__hash_get((ptr *) tab, sizeof(T), key)))) #define bh_hash_delete(T, tab, key) (assert(sizeof(T) == sizeof(*(tab))), bh__hash_delete((ptr *) tab, sizeof(T), key)) + + #define bh_hash_iter_setup(T, tab) (bh__hash_iter_setup((ptr *) tab, sizeof(T))) + #define bh_hash_iter_key(it) (it.entry->key) + #define bh_hash_iter_value(T, it) (*(T *)&(it.entry->value)) #else #define bh_hash_init(tab) bh__hash_init((ptr **) &(tab)) #define bh_hash_free(tab) bh__hash_free((ptr **) &(tab)) @@ -283,11 +287,11 @@ typedef struct bh_hash_iterator { #define bh_hash_has(T, tab, key) (bh__hash_has((ptr *) tab, sizeof(T), key)) #define bh_hash_get(T, tab, key) (*((T *) bh__hash_get((ptr *) tab, sizeof(T), key))) #define bh_hash_delete(T, tab, key) (bh__hash_delete((ptr *) tab, sizeof(T), key)) -#endif -#define bh_hash_iter_setup(T, tab) (assert(sizeof(T) == sizeof(*(tab))), bh__hash_iter_setup((ptr *) tab, sizeof(T))) -#define bh_hash_iter_key(it) (it.entry->key) -#define bh_hash_iter_value(T, it) (assert(sizeof(T) == it.elemsize), *(T *)&(it.entry->value)) + #define bh_hash_iter_setup(T, tab) (assert(sizeof(T) == sizeof(*(tab))), bh__hash_iter_setup((ptr *) tab, sizeof(T))) + #define bh_hash_iter_key(it) (it.entry->key) + #define bh_hash_iter_value(T, it) (assert(sizeof(T) == it.elemsize), *(T *)&(it.entry->value)) +#endif b32 bh__hash_init(ptr **table); b32 bh__hash_free(ptr **table); diff --git a/onyx b/onyx index 8f837e0e..413bb28f 100755 Binary files a/onyx and b/onyx differ