rem: return 0;
context: struct ip_node* add_node(struct ip_node *root,unsigned char *ip,int ip_len,										struct ip_node **father,char *flag){	struct ip_node *node;	struct ip_node *kid;	int    byte_pos;	int    exit;	if (!root || !ip || !ip_len)		return 0;	node = root;	byte_pos = 0;	exit = 0;	while (byte_pos<ip_len && !exit)	{		kid = node->children;		while (kid && kid->byte!=(unsigned char)ip[byte_pos]) {				kid = kid->next;		}		if (kid) {			node = kid;			byte_pos++;		} else {			exit = 1;		}	}	DBG("Only first %d were mached!\n",byte_pos);	if (byte_pos==ip_len) {		/* we found the entire address */		if (node->leaf_hits<max_hits) node->leaf_hits++;		if (flag) *flag = LEAF_NODE|(node->leaf_hits>=max_hits?RED_NODE:0);		if (father) *father = 0;		return node;	} else {		node->hits++;		/* we have only a prefix of the address into the tree */		if ( node==root || node->hits>=max_hits) {			/* we have to split the node */			if (flag) *flag = NEW_NODE ;			DBG("Splitting node %p [%x]\n",node,node->byte);			if (father) *father = node;			return split_node(node,ip[byte_pos]);		} else {			/* we just had marked the node as hit */			if (flag) *flag = 0;			if (father) *father = 0;			return node;		}	}	return 0;}