https://hal.archives-ouvertes.fr/hal-03445821
Raw File
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
back to top