int oval_definition_model_merge(struct oval_definition_model *model, const char *file) { __attribute__nonnull__(model); int ret; xmlTextReader *reader = xmlNewTextReaderFilename(file); if (reader == NULL) { oscap_seterr(OSCAP_EFAMILY_GLIBC, "%s '%s'", strerror(errno), file); return -1; } /* setup context */ struct oval_parser_context context; context.reader = reader; context.definition_model = model; context.user_data = NULL; xmlTextReaderSetErrorHandler(reader, &libxml_error_handler, &context); /* jump into oval_definitions */ while (xmlTextReaderRead(reader) == 1 && xmlTextReaderNodeType(reader) != XML_READER_TYPE_ELEMENT) ; /* start parsing */ ret = oval_definition_model_parse(reader, &context); xmlFreeTextReader(reader); return ret; }
static inline int _oval_definition_model_merge_source(struct oval_definition_model *model, struct oscap_source *source) { /* setup context */ struct oval_parser_context context; context.reader = oscap_source_get_xmlTextReader(source); if (context.reader == NULL) { return -1; } context.definition_model = model; context.user_data = NULL; /* jump into oval_definitions */ while (xmlTextReaderRead(context.reader) == 1 && xmlTextReaderNodeType(context.reader) != XML_READER_TYPE_ELEMENT) ; /* start parsing */ int ret = oval_definition_model_parse(context.reader, &context); xmlFreeTextReader(context.reader); return ret; }