Exemplo n.º 1
0
static gboolean xml_free_func(GNode *node, gpointer data)
{
	XMLNode *xmlnode = node->data;

	xml_free_node(xmlnode);
	return FALSE;
}
Exemplo n.º 2
0
/** free node */
void xml_free_node(
   XML_NODE*             node
   )
{
   XML_NODE* n;

   if (node == NULL)
      return;

   n = node->first_child;
   while (n != NULL)
   {
      XML_NODE* m;
      m = n->next_sibl;
      xml_free_node(n);
      n = m;
   }

   xml_free_attr(node->attr_list);

   if (node->data != NULL)
   {
      BMSfreeMemoryArray(&node->data);
   }
   assert(node->name != NULL);

   BMSfreeMemoryArray(&node->name);
   BMSfreeMemory(&node);

#if 0
   if (n != NULL)
   {
      xml_free_node(n->first_child);
      xml_free_node(n->next_sibl);
      xml_free_attr(n->attr_list);

      if (n->data != NULL)
      {
         BMSfreeMemoryArray(&n->data);
      }
      assert(n->name != NULL);

      BMSfreeMemoryArray(&n->name);
      BMSfreeMemory(&n);
   }
#endif
}
Exemplo n.º 3
0
/** Parse file */
XML_NODE* xml_process(
   const char*           filename            /**< XML file name */
   )
{
   PPOS      ppos;
   XML_NODE* node = NULL;
   XML_ATTR* attr;
   int       result = FALSE;
   char*     myfilename;

   ALLOC_FALSE( BMSduplicateMemoryArray(&myfilename, filename, strlen(filename) + 5) );

#ifdef WITH_ZLIB
   if (access(filename, R_OK) != 0)
   {
      strcat(myfilename, ".gz");

      /* If .gz also does not work, revert to the old name
       * to get a better error message.
       */
      if (access(myfilename, R_OK) != 0)
         strcpy(myfilename, filename);
   }
#endif
   ppos.fp = FOPEN(myfilename, "r");
   if ( ppos.fp == NULL )
      perror(myfilename);
   else
   {
      ppos.filename = myfilename;
      ppos.buf[0]   = '\0';
      ppos.pos      = 0;
      ppos.lineno   = 1;
      ppos.nextsym  = 0;
      ppos.lastsym  = 0;
      ppos.state    = STATE_BEFORE;
      ppos.top      = NULL;

      node = xml_new_node("#ROOT", ppos.lineno);
      if ( node == NULL )
      {
         xml_error(&ppos, "Can't create new node");
      }
      else
      {
         attr = xml_new_attr("filename", myfilename);
         if ( attr == NULL )
            xml_error(&ppos, "Can't create new attribute");
         else
         {
            xml_add_attr(node, attr);

            /* push root node on stack and start to process */
            if ( push_pstack(&ppos, node) )
            {
               result = xml_parse(&ppos);

               clear_pstack(&ppos);
            }
         }
      }

      if ( ! result && (node != NULL) )
      {
         xml_errmsg(&ppos, "Parsing error, processing stopped", TRUE, __FILE__, __LINE__);
         xml_free_node(node);
         node = NULL;
      }
      if (FCLOSE(ppos.fp))
         perror(myfilename);
   }
   BMSfreeMemoryArray(&myfilename);

   return node;
}