diff --git a/src/mapping.h b/src/mapping.h index c244a1a28f09e73f861eb8872f17804d31639d4a..cdd15dc40267840063437eb8161091b7131c265c 100644 --- a/src/mapping.h +++ b/src/mapping.h @@ -63,9 +63,11 @@ extern struct mapping *gc_internal_mapping; #define MD_KEYPAIRS(MD, HSIZE) \ ( (struct keypair *) \ - DO_ALIGN( PTR_TO_INT(((struct mapping_data *)(MD))->hash + HSIZE), \ + DO_ALIGN( PTR_TO_INT(MD) + OFFSETOF(mapping_data, hash) + HSIZE * sizeof(struct keypair *), \ ALIGNOF(struct keypair)) ) + + #ifndef PIKE_MAPPING_KEYPAIR_LOOP #define NEW_MAPPING_LOOP(md) \ for((e=0) DO_IF_DMALLOC( ?0:(debug_malloc_touch(md)) ) ;e<(md)->hashsize;e++) for(k=(md)->hash[e];k;k=k->next) diff --git a/src/multiset.c b/src/multiset.c index 4de7b3ba04253c331e64f0c00a7bbf5665b4c486..351662bdd6a01cee3143284726d99edf081d0221 100644 --- a/src/multiset.c +++ b/src/multiset.c @@ -161,7 +161,7 @@ union nodeptr { #define DELETED_PREV(NODE) INODE (msnode_check (NODE)->i.prev) #define DELETED_NEXT(NODE) ((union msnode *) msnode_check (NODE)->i.ind.u.ptr) -#define NODE_AT(MSD, TYPE, POS) ((struct TYPE *) &(MSD)->nodes + (POS)) +#define NODE_AT(MSD, TYPE, POS) ((struct TYPE *)((char*)(MSD) + OFFSETOF(multiset_data, nodes)) + (POS)) #define NODE_OFFSET(TYPE, POS) \ PTR_TO_INT (NODE_AT ((struct multiset_data *) NULL, TYPE, POS))