table->table[h] = ptr;
table->curnelem++;
} else {
- struct hash_elem *tmp, *last;
- int r;
+ struct hash_elem **e;
+
+ for (e = &table->table[h]; *e; e = &(*e)->next) {
+ int r = m_strcmp((*e)->key, key);
- for (tmp = table->table[h], last = NULL; tmp; last = tmp, tmp = tmp->next) {
- r = m_strcmp(tmp->key, key);
if (r == 0) {
p_delete(&ptr);
return (-1);
if (r > 0)
break;
}
- if (last) {
- last->next = ptr;
- } else {
- table->table[h] = ptr;
- }
- ptr->next = tmp;
+ ptr->next = *e;
+ *e = ptr;
table->curnelem++;
}
return h;