static void _oval_test_item_consumer(struct oval_result_item *item, void **args) { struct oval_sysitem *oval_sysitem = oval_result_item_get_sysitem(item); char *item_id = oval_sysitem_get_id(oval_sysitem); struct oval_result_item *mapped_item = oval_string_map_get_value(ITEMMAP, item_id); if (mapped_item == NULL) { oval_string_map_put(ITEMMAP, item_id, item); oval_result_test_add_item(TEST, item); } else { oval_result_item_free(item); } }
void oval_definition_model_optimize_by_filter_propagation(struct oval_definition_model *model) { struct oval_object_iterator *obj_itr; struct oval_string_map *processed_obj_map; processed_obj_map = oval_string_map_new(); obj_itr = oval_definition_model_get_objects(model); while (oval_object_iterator_has_more(obj_itr)) { struct oval_object *obj; char *obj_id; struct oval_object_content_iterator *cont_itr; struct oval_object_content *cont; struct oval_setobject *set; struct oval_filter_iterator *filter_itr; obj = oval_object_iterator_next(obj_itr); obj_id = oval_object_get_id(obj); if (oval_string_map_get_value(processed_obj_map, obj_id) != NULL) continue; oval_string_map_put(processed_obj_map, obj_id, obj); cont_itr = oval_object_get_object_contents(obj); if (!oval_object_content_iterator_has_more(cont_itr)) { oval_object_content_iterator_free(cont_itr); continue; } cont = oval_object_content_iterator_next(cont_itr); oval_object_content_iterator_free(cont_itr); if (oval_object_content_get_type(cont) != OVAL_OBJECTCONTENT_SET) continue; set = oval_object_content_get_setobject(cont); if (oval_setobject_get_type(set) == OVAL_SET_AGGREGATE) { _fp_set_recurse(model, set, obj_id); continue; } filter_itr = oval_setobject_get_filters(set); if (!oval_filter_iterator_has_more(filter_itr)) { oval_filter_iterator_free(filter_itr); continue; } oval_filter_iterator_free(filter_itr); oval_set_propagate_filters(model, set, obj_id); } oval_object_iterator_free(obj_itr); oval_string_map_free(processed_obj_map, NULL); }
void oval_string_map_put_string(struct oval_string_map *map, const char *key, const char *item) { char *temp = (char *)oscap_alloc((strlen(item) + 1) * sizeof(char) + 1); char *useval = strcpy(temp, item); oval_string_map_put(map, key, useval); }
void oval_definition_model_add_variable(struct oval_definition_model *model, struct oval_variable *variable) { __attribute__nonnull__(model); char *key = oval_variable_get_id(variable); oval_string_map_put(model->variable_map, key, (void *)variable); }
void oval_definition_model_add_state(struct oval_definition_model *model, struct oval_state *state) { __attribute__nonnull__(model); char *key = oval_state_get_id(state); oval_string_map_put(model->state_map, key, (void *)state); }
void oval_definition_model_add_object(struct oval_definition_model *model, struct oval_object *object) { __attribute__nonnull__(model); char *key = oval_object_get_id(object); oval_string_map_put(model->object_map, key, (void *)object); }
void oval_definition_model_add_test(struct oval_definition_model *model, struct oval_test *test) { __attribute__nonnull__(model); char *key = oval_test_get_id(test); oval_string_map_put(model->test_map, key, (void *)test); }
void oval_definition_model_add_definition(struct oval_definition_model *model, struct oval_definition *definition) { __attribute__nonnull__(model); char *key = oval_definition_get_id(definition); oval_string_map_put(model->definition_map, key, (void *)definition); }