+/*
+ Delete the head element from table[i]. This isn't really
+ needed, but keeps code analysers from claiming that memory
+ is being used after it is freed.
+*/
+static void del_head_ele( Sym_tab *table, int hv ) {
+ Sym_ele **sym_tab;
+ Sym_ele *eptr; // first in list
+
+
+ if( hv < 0 || hv >= table->size ) {
+ return;
+ }
+
+ sym_tab = table->symlist;
+ if( (eptr = sym_tab[hv]) != NULL ) // not an empty element; yank it off
+ {
+ if( (sym_tab[hv] = eptr->next) != NULL ) { // bump list to next if not the only thing here
+ sym_tab[hv]->prev = NULL; // new head
+ }
+ eptr->next = NULL; // take no chances
+
+ if( eptr->class && eptr->name ) { // class 0 entries are numeric, so name is NOT a pointer
+ free( (void *) eptr->name );
+ }
+
+ free( eptr );
+
+ table->deaths++;
+ table->inhabitants--;
+ }
+}
+