int OBJ_NAME_new_index(unsigned long (*hash_func)(), int (*cmp_func)(), void (*free_func)())
int OBJ_NAME_new_index(unsigned long (*hash_func)(const char *), int (*cmp_func)(const void *, const void *), void (*free_func)(const char *, int, const char *))
int OBJ_NAME_new_index(unsigned long (*hash_func)(), int (*cmp_func)(),	     void (*free_func)())	{	int ret;	int i;	NAME_FUNCS *name_funcs;	if (name_funcs_stack == NULL)		{		MemCheck_off();		name_funcs_stack=sk_NAME_FUNCS_new_null();		MemCheck_on();		}	if ((name_funcs_stack == NULL))		{		/* ERROR */		return(0);		}	ret=names_type_num;	names_type_num++;	for (i=sk_NAME_FUNCS_num(name_funcs_stack); i<names_type_num; i++)		{		MemCheck_off();		name_funcs = OPENSSL_malloc(sizeof(NAME_FUNCS));		name_funcs->hash_func = lh_strhash;		name_funcs->cmp_func = (int (*)())strcmp;		name_funcs->free_func = 0; /* NULL is often declared to					    * ((void *)0), which according					    * to Compaq C is not really					    * compatible with a function					    * pointer.  -- Richard Levitte*/		sk_NAME_FUNCS_push(name_funcs_stack,name_funcs);		MemCheck_on();		}	name_funcs = sk_NAME_FUNCS_value(name_funcs_stack, ret);	if (hash_func != NULL)		name_funcs->hash_func = hash_func;	if (cmp_func != NULL)		name_funcs->cmp_func = cmp_func;	if (free_func != NULL)		name_funcs->free_func = free_func;	return(ret);	}