https://hal.archives-ouvertes.fr/hal-03445821
xmlutil.h
/*
Copyright Universite de Versailles Saint-Quentin en Yvelines 2009
AUTHORS: Sebastien Briais, Sid Touati
This file is part of GDD.
GDD is free software: you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
GDD is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with GDD. If not, see
<http://www.gnu.org/licenses/>.
*/
/** This file is only used internally. So it does not pollute namespace. */
#ifndef __XMLUTIL_H
#define __XMLUTIL_H
#include <stdio.h>
#include <libxml/xmlstring.h>
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
#include <SCEDA/common.h>
#define char_of_xmlchar(s) ((char *)(s))
#define xmlchar_of_char(s) ((xmlChar *)(s))
/** sax read function for file streams */
static int sax_read(void *stream, char *buf, int len) {
return fread(buf, 1, len, (FILE *)stream);
}
/** sax close function for file streams */
static int sax_close(void *stream) {
// return fclose((FILE *)stream);
return 0;
}
/** find the value of an optionnal attribute in an array of attributes
@param[in] attr = attribute to find
@param[in] attrs = array of attributes as given by sax parser
@return the index of the value in attrs or -1 if not found */
static int findOptAttr(const char *attr, const xmlChar **attrs) {
int i;
for(i = 0; attrs[i] != NULL; i+=2) {
if(xmlStrEqual(attrs[i], xmlchar_of_char(attr))) {
return (i+1);
}
}
return -1;
}
/** find the value of an attribute in an array of attributes or fail
@param[in] attr = attribute to find
@param[in] attrs = array of attributes as given by sax parser
@return the index of the value in attrs or fail if not found */
static int findAttr(const char *attr, const xmlChar **attrs) {
int ret = findOptAttr(attr, attrs);
if(ret == -1) {
fprintf(stderr,"attribute %s not found\n",attr);
exit(1);
}
return ret;
}
/** get the integer value of an xml string
@param[in] str = xml string
@return the integer value */
static int atoi_xml(const xmlChar *str) {
return atoi(char_of_xmlchar(str));
}
#endif