/*---------- operations on MaskMap_Entry ----------*/
static void mme_init(MaskMap_Entry *mme) {
+ mme->prefixlen= -1;
mme->prefix= 0;
mme->data= 0;
}
static void mm_reallocentries(MaskMap_Value *mm, int len) {
int i;
MaskMap_Entry *newentries, *clear;
-
+
+ assert(len >= mm->allocd);
+ if (!len) return;
+
newentries= TREALLOC(mm->entries, sizeof(*newentries)*len);
- assert(!len || newentries);
+ assert(newentries);
- for (i=mm->allocd, clear=&mm->entries[mm->allocd];
+ for (i=mm->allocd, clear=newentries+mm->allocd;
i < len;
i++, clear++)
mme_init(clear);
/* we're adding an entry, make room for it */
findend= mm_count(mm);
- if (findend == mm->allocd) mm_reallocentries(mm, mm->allocd*2 + 1);
+ if (findend == mm->allocd) {
+ mm_reallocentries(mm, mm->allocd*2 + 1);
+ search= mm->entries + insertat;
+ }
if (findend > insertat)
- memmove(&mm->entries[insertat+1],
- &mm->entries[insertat],
- sizeof(mm->entries[0]) * (findend - insertat));
+ memmove(search + 1, search, sizeof(*search) * (findend - insertat));
*search= mme;
put_here: