]> git.decadent.org.uk Git - odhcp6c.git/blobdiff - src/odhcp6c.c
Fix odhcp6c_find_entry
[odhcp6c.git] / src / odhcp6c.c
index dce1e0ee7494a3893df9ebef0625d75b7c042bcb..4c534c17b518a66d74688f9131123b2351c9ecc9 100644 (file)
@@ -553,9 +553,9 @@ void* odhcp6c_get_state(enum odhcp6c_state state, size_t *len)
 }
 
 
-struct odhcp6c_entry* odhcp6c_find_entry(enum odhcp6c_state state, const struct odhcp6c_entry *new)
+static struct odhcp6c_entry* odhcp6c_find_entry(enum odhcp6c_state state, const struct odhcp6c_entry *new)
 {
-       size_t len, cmplen = offsetof(struct odhcp6c_entry, target) + new->length / 8;
+       size_t len, cmplen = offsetof(struct odhcp6c_entry, target) + ((new->length + 7) / 8);
        struct odhcp6c_entry *start = odhcp6c_get_state(state, &len);
        struct odhcp6c_entry *x = NULL;
 
@@ -584,14 +584,12 @@ bool odhcp6c_update_entry(enum odhcp6c_state state, struct odhcp6c_entry *new,
                                        new->valid - x->valid < min_update_interval &&
                                        new->preferred >= x->preferred &&
                                        new->preferred != UINT32_MAX &&
-                                       new->preferred - x->preferred < min_update_interval &&
-                                       x->class == new->class)
+                                       new->preferred - x->preferred < min_update_interval)
                                return false;
                        x->valid = new->valid;
                        x->preferred = new->preferred;
                        x->t1 = new->t1;
                        x->t2 = new->t2;
-                       x->class = new->class;
                        x->iaid = new->iaid;
                } else {
                        odhcp6c_add_state(state, new, sizeof(*new));