Exemple #1
0
/* Performs a deep copy of a provided xccdf_check, returns a pointer to that copy */
struct xccdf_check *xccdf_check_clone(const struct xccdf_check* old_check)
{
	struct xccdf_check *new_check = calloc(1, sizeof(struct xccdf_check));

	new_check->id = oscap_strdup(old_check->id);
	new_check->system = oscap_strdup(old_check->system);
	new_check->selector = oscap_strdup(old_check->selector);
	new_check->content =  oscap_strdup(old_check->content);
	new_check->oper = old_check->oper;
	new_check->flags = old_check->flags;

	new_check->imports = oscap_list_clone(old_check->imports, (oscap_clone_func) xccdf_check_import_clone);
	new_check->exports = oscap_list_clone(old_check->exports, (oscap_clone_func) xccdf_check_export_clone);
	new_check->content_refs = oscap_list_clone(old_check->content_refs, (oscap_clone_func) xccdf_check_content_ref_clone);
	new_check->children = oscap_list_clone(old_check->children, (oscap_clone_func) xccdf_check_clone);

	return new_check;
}
Exemple #2
0
struct cpe_testexpr * cpe_testexpr_clone(struct cpe_testexpr * old_expr)
{
	struct cpe_testexpr * new_expr = cpe_testexpr_new();
	new_expr->oper = old_expr->oper;

	switch (new_expr->oper & CPE_LANG_OPER_MASK) {
	case CPE_LANG_OPER_AND:
	case CPE_LANG_OPER_OR:
		new_expr->meta.expr = oscap_list_clone(old_expr->meta.expr, (oscap_clone_func) cpe_testexpr_clone);
		break;
	case CPE_LANG_OPER_MATCH:
		new_expr->meta.cpe = cpe_name_clone(old_expr->meta.cpe);
		break;
	case CPE_LANG_OPER_CHECK:
		new_expr->meta.check.system = oscap_strdup(old_expr->meta.check.system);
		new_expr->meta.check.href = oscap_strdup(old_expr->meta.check.href);
		new_expr->meta.check.id = oscap_strdup(old_expr->meta.check.id);
		break;
	default:
		break;
	}

	return new_expr;
}