-/* @(#) $Id: os_xml_node_access.c,v 1.6 2009/06/24 17:06:32 dcid Exp $ */
+/* @(#) $Id: ./src/os_xml/os_xml_node_access.c, 2011/09/08 dcid Exp $
+ */
/* Copyright (C) 2009 Trend Micro Inc.
* All rights reserved.
*
* This program is a free software; you can redistribute it
* and/or modify it under the terms of the GNU General Public
- * License (version 3) as published by the FSF - Free Software
+ * License (version 2) as published by the FSF - Free Software
* Foundation
*/
/* OS_ClearNode v0,1
- * Clear the Node structure
+ * Clear the Node structure
*/
void OS_ClearNode(xml_node **node)
{
if(node)
- {
+ {
int i=0;
while(node[i])
{
if(node[i]->element)
+ {
free(node[i]->element);
+ }
if(node[i]->content)
+ {
free(node[i]->content);
+ }
if(node[i]->attributes)
{
int j=0;
node[i]->values=NULL;
free(node[i]);
node[i]=NULL;
- i++;
+ i++;
}
free(node);
node=NULL;
i = node->key;
j = _lxml->rl[i++];
}
-
-
+
+
for(;i<_lxml->cur;i++)
{
if(_lxml->tp[i] == XML_ELEM)
ret = (xml_node**)realloc(ret,(k+1)*sizeof(xml_node*));
if(ret == NULL)
return(NULL);
-
+
/* Allocating for the xml_node * */
ret[k] = (xml_node *)calloc(1,sizeof(xml_node));
if(ret[k] == NULL)
return(NULL);
-
+
ret[k]->element = NULL;
ret[k]->content = NULL;
ret[k]->attributes = NULL;
ret[k]->values = NULL;
-
+
/* Getting the element */
ret[k]->element=strdup(_lxml->el[i]);
if(ret[k]->element == NULL)
free(ret);
return(NULL);
}
-
+
/* Getting the content */
if(_lxml->ct[i])
{
if((_lxml->tp[l] == XML_ATTR)&&(_lxml->rl[l] == j+1)&&
(_lxml->el[l]) && (_lxml->ct[l]))
{
- ret[k]->attributes =
+ ret[k]->attributes =
(char**)realloc(ret[k]->attributes,
(l-i+1)*sizeof(char*));
- ret[k]->values =
+ ret[k]->values =
(char**)realloc(ret[k]->values,
(l-i+1)*sizeof(char*));
- if(!(ret[k]->attributes) ||
+ if(!(ret[k]->attributes) ||
!(ret[k]->values))
return(NULL);
ret[k]->attributes[l-i-1]=strdup(_lxml->el[l]);
if(!(ret[k]->attributes[l-i-1]) ||
!(ret[k]->values[l-i-1]))
return(NULL);
- l++;
+ l++;
}
else
{
break;
}
}
-
+
if(ret ==NULL)
return(NULL);