X-Git-Url: https://git.decadent.org.uk/gitweb/?p=odhcp6c.git;a=blobdiff_plain;f=src%2Fodhcp6c.c;h=59f6390801152d82264e3a45516e8979a8ca5a4e;hp=1714d629b7cc38a7b3816cfaac58af5a2420baa0;hb=d277ddb78abd034eb0e1c088ac969cdeef10d9e2;hpb=6326ab374ede4fff1e8019a50d4b9854b8db7625 diff --git a/src/odhcp6c.c b/src/odhcp6c.c index 1714d62..59f6390 100644 --- a/src/odhcp6c.c +++ b/src/odhcp6c.c @@ -619,7 +619,7 @@ static void odhcp6c_expire_list(enum odhcp6c_state state, uint32_t elapsed) uint8_t *start = odhcp6c_get_state(state, &len); for (struct odhcp6c_entry *c = (struct odhcp6c_entry*)start; (uint8_t*)c < &start[len] && &c->auxtarget[c->auxlen] <= &start[len]; - c = (struct odhcp6c_entry*)(&c->auxtarget[c->auxlen])) { + ) { if (c->t1 < elapsed) c->t1 = 0; else if (c->t1 != UINT32_MAX) @@ -640,8 +640,12 @@ static void odhcp6c_expire_list(enum odhcp6c_state state, uint32_t elapsed) else if (c->valid != UINT32_MAX) c->valid -= elapsed; - if (!c->valid) + if (!c->valid) { odhcp6c_remove_state(state, ((uint8_t*)c) - start, sizeof(*c) + c->auxlen); + start = odhcp6c_get_state(state, &len); + } else { + c = (struct odhcp6c_entry*)(&c->auxtarget[c->auxlen]); + } } }