Ejemplo n.º 1
0
/**
 * Free dynamically allocated memory associated with given set of settings.
 * @pre *set is initialized set of settings, set != NULL && *set != NULL
 * @post *set == NULL
 */
void
settings_set_free(settings_set_t **set) {
	isc_mem_t *mctx = NULL;
	setting_t *s = NULL;

	if (set == NULL || *set == NULL)
		return;

	if ((*set)->mctx != NULL) {
		mctx = (*set)->mctx;

		if ((*set)->lock != NULL) {
			DESTROYLOCK((*set)->lock);
			SAFE_MEM_PUT_PTR(mctx, (*set)->lock);
		}

		for (s = (*set)->first_setting; s->name != NULL; s++) {
			if (s->is_dynamic)
				isc_mem_free(mctx, s->value.value_char);
		}
		if ((*set)->first_setting != NULL)
			isc_mem_free(mctx, (*set)->first_setting);
		isc_mem_free(mctx, (*set)->name);
		isc_mem_free(mctx, *set);
		isc_mem_detach(&mctx);
	}

	*set = NULL;
}
Ejemplo n.º 2
0
static isc_result_t
rdata_clone(isc_mem_t *mctx, dns_rdata_t *source, dns_rdata_t **targetp)
{
	isc_result_t result;
	dns_rdata_t *target = NULL;
	isc_region_t target_region, source_region;

	REQUIRE(mctx != NULL);
	REQUIRE(source != NULL);
	REQUIRE(targetp != NULL && *targetp == NULL);

	CHECKED_MEM_GET_PTR(mctx, target);

	dns_rdata_init(target);

	dns_rdata_toregion(source, &source_region);

	CHECKED_MEM_GET(mctx, target_region.base, source_region.length);

	target_region.length = source_region.length;
	memcpy(target_region.base, source_region.base, source_region.length);
	dns_rdata_fromregion(target, source->rdclass, source->type,
			     &target_region);

	*targetp = target;

	return ISC_R_SUCCESS;

cleanup:
	SAFE_MEM_PUT_PTR(mctx, target);

	return result;
}
Ejemplo n.º 3
0
isc_result_t
rdatalist_clone(isc_mem_t *mctx, dns_rdatalist_t *source,
		dns_rdatalist_t **targetp)
{
	dns_rdatalist_t *target;
	dns_rdata_t *source_rdata;
	dns_rdata_t *target_rdata;
	isc_result_t result;

	REQUIRE(mctx != NULL);
	REQUIRE(source != NULL);
	REQUIRE(targetp != NULL && *targetp == NULL);

	CHECKED_MEM_GET_PTR(mctx, target);

	dns_rdatalist_init(target);
	target->rdclass = source->rdclass;
	target->type = source->type;
	target->covers = source->covers;
	target->ttl = source->ttl;

	source_rdata = HEAD(source->rdata);
	while (source_rdata != NULL) {
		target_rdata = NULL;
		CHECK(rdata_clone(mctx, source_rdata, &target_rdata));
		APPEND(target->rdata, target_rdata, link);
		source_rdata = NEXT(source_rdata, link);
	}

	*targetp = target;

	return ISC_R_SUCCESS;

cleanup:
	if (target)
		free_rdatalist(mctx, target);
	SAFE_MEM_PUT_PTR(mctx, target);

	return result;
}
Ejemplo n.º 4
0
static isc_result_t
cache_node_create(ldap_cache_t *cache, ldapdb_rdatalist_t rdatalist,
		  cache_node_t **nodep)
{
	isc_result_t result;
	cache_node_t *node;

	REQUIRE(cache != NULL);
	REQUIRE(nodep != NULL && *nodep == NULL);

	CHECKED_MEM_GET_PTR(cache->mctx, node);
	ZERO_PTR(node);
	isc_mem_attach(cache->mctx, &node->mctx);
	node->rdatalist = rdatalist;
	CHECK(isc_time_nowplusinterval(&node->valid_until, &cache->cache_ttl));

	*nodep = node;
	return ISC_R_SUCCESS;

cleanup:
	SAFE_MEM_PUT_PTR(cache->mctx, node);

	return result;
}