#include <stdlib.h>
#include <memory.h>
#include <netdb.h>
+#include <pthread.h>
#include "rmr_symtab.h"
{
const char *p;
long t = 0;
- unsigned long tt = 0;
- unsigned long x = 79;
for( p = n; *p; p++ ) /* a bit of magic */
t = (t * 79 ) + *p;
return (int ) (t % size);
}
-/*
+/*
Delete element pointed to by eptr which is assumed to be
a member of the list at symtab[i].
*/
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 );
}
much the same.
*/
static int putin( Sym_tab *table, const char *name, unsigned int class, void *val ) {
- Sym_ele *eptr; /* pointer into hash table */
- Sym_ele **sym_tab; /* pointer into hash table */
+ Sym_ele *eptr; /* pointer into hash table */
+ Sym_ele **sym_tab; /* pointer into hash table */
int hv; /* hash value */
int rc = 0; /* assume it existed */
uint64_t nkey = 0; // numeric key if class == 0
for( eptr=sym_tab[hv]; eptr && eptr->nkey != nkey; eptr=eptr->next );
}
- if( ! eptr ) { // not found above, so add
+ if( ! eptr ) { // not found above, so add
rc++;
table->inhabitants++;
table = (Sym_tab *) vtable;
sym_tab = table->symlist;
- for( i = 0; i < table->size; i++ )
- {
- if( sym_tab[i] )
- for( eptr = sym_tab[i]; eptr; eptr = eptr->next )
- {
- if( eptr->val && eptr->class ) {
- fprintf( stderr, "symtab dump: key=%s val@=%p\n", eptr->name, eptr->val );
- } else {
- fprintf( stderr, "symtab dump: nkey=%lu val@=%p\n", (unsigned long) eptr->nkey, eptr->val );
+ for( i = 0; i < table->size; i++ ) {
+ if( sym_tab[i] ) {
+ for( eptr = sym_tab[i]; eptr; eptr = eptr->next ) {
+ if( eptr->val && eptr->class ) {
+ fprintf( stderr, "symtab dump: key=%s val@=%p\n", eptr->name, eptr->val );
+ } else {
+ fprintf( stderr, "symtab dump: nkey=%lu val@=%p\n", (unsigned long) eptr->nkey, eptr->val );
+ }
}
}
}
*/
extern void *rmr_sym_alloc( int size )
{
- int i;
Sym_tab *table;
if( size < 11 ) /* provide a bit of sanity */
Sym_ele **list;
Sym_ele *se;
Sym_ele *next; /* allows user to delete the node(s) we return */
- int i;
+ int i;
- st = (Sym_tab *) vst;
+ if( (st = (Sym_tab *) vst) == NULL ) {
+ return;
+ }
- if( st && (list = st->symlist) != NULL && user_fun != NULL ) {
+ if( (list = st->symlist) != NULL && user_fun != NULL ) {
for( i = 0; i < st->size; i++ ) {
- se = list[i];
+ se = list[i];
while( se ) {
next = se->next; // allow callback to delete from the list w/o borking us
if( class == se->class ) {