struct oval_entity *oval_entity_clone(struct oval_definition_model *new_model, struct oval_entity *old_entity) { struct oval_entity *new_entity = oval_entity_new(new_model); oval_datatype_t datatype = oval_entity_get_datatype(old_entity); oval_entity_set_datatype(new_entity, datatype); int mask = oval_entity_get_mask(old_entity); oval_entity_set_mask(new_entity, mask); bool xsi_nil = oval_entity_get_xsi_nil(old_entity); oval_entity_set_xsi_nil(new_entity, xsi_nil); char *name = oval_entity_get_name(old_entity); oval_entity_set_name(new_entity, name); oval_operation_t operation = oval_entity_get_operation(old_entity); oval_entity_set_operation(new_entity, operation); oval_entity_type_t type = oval_entity_get_type(old_entity); oval_entity_set_type(new_entity, type); struct oval_value *value = oval_entity_get_value(old_entity); if (value) { oval_entity_set_value(new_entity, oval_value_clone(value)); } struct oval_variable *old_variable = oval_entity_get_variable(old_entity); if (old_variable) { oval_entity_set_variable(new_entity, oval_variable_clone(new_model, old_variable)); } oval_entity_varref_type_t reftype = oval_entity_get_varref_type(old_entity); oval_entity_set_varref_type(new_entity, reftype); return new_entity; }
static SEXP_t *oval_record_field_STATE_to_sexp(struct oval_record_field *rf) { struct oval_entity *rf_ent; struct oval_variable *var; oval_check_t ochk; oval_datatype_t dt; SEXP_t *rf_sexp, *r0; rf_ent = oval_entity_new(NULL); oval_entity_set_name(rf_ent, oval_record_field_get_name(rf)); oval_entity_set_operation(rf_ent, oval_record_field_get_operation(rf)); dt = oval_record_field_get_datatype(rf); oval_entity_set_datatype(rf_ent, dt); var = oval_record_field_get_variable(rf); if (var != NULL) { oval_entity_set_varref_type(rf_ent, OVAL_ENTITY_VARREF_ATTRIBUTE); oval_entity_set_variable(rf_ent, var); } else { struct oval_value *val; val = oval_value_new(dt, oval_record_field_get_value(rf)); oval_entity_set_value(rf_ent, val); } rf_sexp = oval_entity_to_sexp(rf_ent); ochk = oval_record_field_get_var_check(rf); if (ochk != OVAL_CHECK_UNKNOWN) { probe_ent_attr_add(rf_sexp, "var_check", r0 = SEXP_number_newu_32(ochk)); SEXP_free(r0); } ochk = oval_record_field_get_ent_check(rf); if (ochk != OVAL_CHECK_UNKNOWN) { probe_ent_attr_add(rf_sexp, "entity_check", r0 = SEXP_number_newu_32(ochk)); SEXP_free(r0); } oval_entity_free(rf_ent); return rf_sexp; }