Пример #1
0
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;
}
Пример #2
0
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;
}