Exemple #1
0
int acl_array_delete_obj(ACL_ARRAY *a, void *obj, void (*free_fn)(void *))
{
	int	idx, position, ret;

	if(a == NULL || obj == NULL)
		return(-1);
	position = -1;
	for(idx = 0; idx < a->count; idx++) {
		if(a->items[idx] == obj) {
			position = idx;
			break;
		}
	}

	if(free_fn != NULL && obj != NULL)
		free_fn(obj);
	if(position == -1) /* not found */
		return(-1);

	/* don't need to free the obj in acl_array_delete_idx */
	a->items[idx] = NULL;
	ret = acl_array_delete_idx(a, position, NULL);
	if(ret < 0)
		return(-1);
	return(ret);
}
Exemple #2
0
int acl_cfg_parser_delete(ACL_CFG_PARSER *parser, const char *name)
{
	char  myname[] = "acl_cfg_parser_delete";
	ACL_CFG_LINE *cfg_line = NULL;
	int   i, n, ok = 0, j;

	if (parser == NULL || name == NULL || *name == 0) {
		printf("%s: input error\n", myname);
		return (-1);
	}

	if (parser->_cfg_array == NULL) {
		return (0);
	}

	n = acl_array_size(parser->_cfg_array);
	for (i = 0; i < n; i++) {
		cfg_line = (ACL_CFG_LINE *) acl_array_index(parser->_cfg_array, i);
		if (cfg_line == NULL)
			return (0);
		if (cfg_line->ncount < 1)
			continue;
		if (strcmp(cfg_line->value[0], name) == 0) {
			ok = 1;
			break;
		}
	}

	if (ok) {
		if (cfg_line->pdata == NULL && cfg_line->value != NULL)
			parser->valid_line--;
		parser->total_line--;
		acl_array_delete_idx(parser->_cfg_array, i, _cfg_line_free);

		n = acl_array_size(parser->_cfg_array);
		for (j = i; j < n; j++) {
			cfg_line = (ACL_CFG_LINE *) acl_array_index(parser->_cfg_array, j);
			if (cfg_line == NULL)
				break;
			cfg_line->line_number--;
		}
	}

	return (0);
}