On 9/23/2019 9:03 PM, Eric Wong wrote: > This is a step towards removing the requirement for > hashmap_entry being the first field of a struct. > > Signed-off-by: Eric Wong <e@xxxxxxxxx> > --- > diff.c | 19 ++++++++++++------- > diffcore-rename.c | 11 +++++++---- > hashmap.c | 2 +- > hashmap.h | 12 ++++++++---- > name-hash.c | 8 +++++--- > t/helper/test-hashmap.c | 10 ++++++---- > 6 files changed, 39 insertions(+), 23 deletions(-) > > diff --git a/diff.c b/diff.c > index 72d3c6aa19..663b5d01f8 100644 > --- a/diff.c > +++ b/diff.c > @@ -1035,8 +1035,10 @@ static void pmb_advance_or_null_multi_match(struct diff_options *o, > { > int i; > char *got_match = xcalloc(1, pmb_nr); > + struct hashmap_entry *ent = &match->ent; > > - for (; match; match = hashmap_get_next(hm, &match->ent)) { > + for (; ent; ent = hashmap_get_next(hm, ent)) { I suppose that the old code had a blank first entry in the for(;;), but we could move our `ent = &match->ent` into the initializer, right? That would make the loop look a little better, maybe. This happens again below. Thanks, -Stolee > @@ -1189,8 +1193,9 @@ static void mark_color_as_moved(struct diff_options *o, > * The current line is the start of a new block. > * Setup the set of potential blocks. > */ > - for (; match; match = hashmap_get_next(hm, > - &match->ent)) { > + for (; ent; ent = hashmap_get_next(hm, ent)) { > + match = container_of(ent, struct moved_entry, > + ent);