Exemple #1
0
void rb_destroy(struct rb_root* root, void (*del_func)(struct rb_node*))
{
    struct rb_node* node = root->node;

    if (!del_func)
        del_func = rb_null_del;

    while (node) {
        if (node->left)
            node = node->left;
        else if (node->right)
            node = node->right;
        else {
            struct rb_node* tmp = node;

            node = rb_parent(node);
            if (node) {
                if (tmp == node->left)
                    node->left = NULL;
                else
                    node->right = NULL;
            }

            del_func(tmp);
        }
    }

    root->node = NULL;
}
Exemple #2
0
int
db_avs_diff(const struct bu_attribute_value_set *left_set,
	    const struct bu_attribute_value_set *right_set,
            const struct bn_tol *diff_tol,
	    int (*add_func)(const char *attr_name, const char *attr_val, void *data),
	    int (*del_func)(const char *attr_name, const char *attr_val, void *data),
	    int (*chgd_func)(const char *attr_name, const char *attr_val_left, const char *attr_val_right, void *data),
	    int (*unchgd_func)(const char *attr_name, const char *attr_val, void *data),
	    void *client_data)
{
    int state = DIFF_EMPTY;
    struct bu_attribute_value_pair *avp;
    for (BU_AVS_FOR(avp, left_set)) {
	const char *val2 = bu_avs_get(right_set, avp->name);
	if (!val2) {
	    if (del_func) {state |= del_func(avp->name, avp->value, client_data);}
	} else {
	    if (avpp_val_compare(avp->value, val2, diff_tol)) {
		if (unchgd_func) {state |= unchgd_func(avp->name, avp->value, client_data);}
	    } else {
		if (chgd_func) {state |= chgd_func(avp->name, avp->value, val2, client_data);}
	    }
	}
    }
    for (BU_AVS_FOR(avp, right_set)) {
	const char *val1 = bu_avs_get(left_set, avp->name);
	if (!val1) {
	    if (add_func) {state |= add_func(avp->name, avp->value, client_data);}
	}
    }
    return state;
}
void delete_evwr_list(track_ctx_t *trackctx, PyObject *pylist)
{
  Py_ssize_t list_len;
  Py_ssize_t idx;
  midiseq_evwrObject *evwrobj = NULL;

  void (*del_func)(track_ctx_t *, ev_iterator_t *);

  if (trackctx->engine && engine_is_running(trackctx->engine) == TRUE)
    del_func = trackctx_event2trash;
  else
    del_func = trackctx_del_event;

  for (list_len = PyList_GET_SIZE(pylist),
         idx = 0;
       idx < list_len;
       idx++)
    {
      evwrobj = (midiseq_evwrObject *) PyList_GetItem(pylist, idx);
      del_func(trackctx, &(evwrobj->evit));
    }
}
int ConnectBrokenFunctionChunk(ea_t address)
{
	int connected_links_count=0;
	func_t *func=get_func(address);
	char function_name[1024]={0,};
	get_func_name(address,function_name,sizeof(function_name));

	bool is_function=false;
	bool AddFunctionAsMemberOfFunction=false;

	ea_t cref=get_first_cref_to(address);
	while(cref!=BADADDR)
	{
		func_t *cref_func=get_func(cref);
		if(cref_func!=func)
		{
			char op_buffer[40]={0,};
			ua_mnem(cref,op_buffer,sizeof(op_buffer));
			if(cmd.itype==NN_call || cmd.itype==NN_callfi || cmd.itype==NN_callni)
			{
				is_function=true;
				break;
			}
		}
		cref=get_next_cref_to(address,cref);
	}

	if(!is_function)
	{
		if(func)
			del_func(address);	
		cref=get_first_cref_to(address);
		while(cref!=BADADDR)
		{
			func_t *cref_func=get_func(cref);
			if(cref_func)
			{
				char cref_function_name[1024];
				get_func_name(cref,cref_function_name,sizeof(cref_function_name));
				msg("Adding Location %s(%x) To Function Member Of %s(%x:%x)\n",function_name,address,cref_function_name,cref_func->startEA,cref);
				append_func_tail(cref_func,address,GetBlockEnd(address));
				connected_links_count++;
			}
			cref=get_next_cref_to(address,cref);
		}
	}else if(AddFunctionAsMemberOfFunction)
	{
		cref=get_first_cref_to(address);
		while(cref!=BADADDR)
		{
			char op_buffer[40]={0,};
			ua_mnem(cref,op_buffer,sizeof(op_buffer));
			if(!(cmd.itype==NN_call || cmd.itype==NN_callfi || cmd.itype==NN_callni))
			{
				func_t *cref_func=get_func(cref);
				if(cref_func)
				{
					char cref_function_name[1024];
					get_func_name(cref,cref_function_name,sizeof(cref_function_name));
					msg("Adding Function %s(%x) To Function Member Of %s(%x:%x)\n",function_name,address,cref_function_name,cref_func->startEA,cref);
					append_func_tail(cref_func,address,GetBlockEnd(address));
					connected_links_count++;
				}
			}
			cref=get_next_cref_to(address,cref);
		}
	}
	return connected_links_count;
}
Exemple #5
0
void mem_stree_clean(mem_stree_t *tree, void (*del_func)(void*)) {
    ONS_ASSERT(tree != NULL);

    if(del_func) while(tree->count) del_func(mem_stree_del(tree, tree->root->key, tree->root->klen));
    else while(tree->count) mem_stree_del(tree, tree->root->key, tree->root->klen);
}