1
0
Fork 0

Some small updates; fix typo's and fix a small memory leak

Improve the documentation in README
This commit is contained in:
ehofman 2008-06-30 07:30:02 +00:00
parent 64a07de080
commit dd77cd25f6
3 changed files with 52 additions and 9 deletions

View file

@ -1,3 +1,46 @@
This library is specially designed for reading xml configuration files and
to be as low on memory management as possible. Modifying or writing xml files
is not planned for the future. In most situations being able to gather data
by reading an xml file is more than enough and the read-only decision
provides a number of advantages over a one-size fits all approach. For isntance
the memory footprint can be kept low and the library can be kept simple.
To achieve these goals the mmap function is used to map the configuration file
to a memory region. The only places where memory is allocated is when creating
a new XML-id, when requesting a string from a node or when a request is made to
copy a node.
Using this library should be pretty simple for most tasks; just open a file,
read every parameter one by one and close the id again.
{
void *xid;
xid = xmlOpen("/tmp/file.xml");
xpos = xmlGetNodeDouble(xid, "/configuration/x-pos");
ypos = xmlGetNodeDouble(xid, "/configuration/y-pos");
zpos = xmlGetNodeDouble(xid, "/configuration/z-pos");
xmlClose(xid);
}
While it is certainly possible to access every node directly by calling the
xmlGetNode(Int/Double/String) functions, when more than one node need to be
gathered from a parent node it is advised to get the id of the parent node
and work from there. This is because the XML-id holds the boundaries of the
(parent)node which limits the searching area causing improved searching speed.
{
void *xnid;
char *s;
xnid = xmlGetNode(id, "/configuration/setup/");
version = xmlGetNodeDouble(xnid, "version");
s = xmlGetNodeString(xnid, "author");
if (s) author = s;
free(s);
free(xnid);
}
Overview of the available functions:
-----------------------------------------------------------------------------
#
# Functions to Open and Close the XML file
# e.g.
@ -16,7 +59,7 @@ void *xmlGetNode(const void *, const char *);
void *xmlCopyNode(void *, const char *);
#
# Functions to walk the node tree an process them one by one.
# Functions to walk the node tree and process them one by one.
# e.g.
# xmid = xmlMarkId(id);
# num = xmlGetNumElements(xmid);
@ -28,6 +71,7 @@ void *xmlCopyNode(void *, const char *);
# }
# }
# }
# free(xmid);
#
void *xmlMarkId(void *);
unsigned int xmlGetNumElements(void *, const char *);

View file

@ -1,5 +1,5 @@
/* Copyright (c) 2007,2008 by Adalin B.V.
* Copyright (c) 2007,2008 by Erik Hofman
/* Copyright (c) 2007, 2008 by Adalin B.V.
* Copyright (c) 2007, 2008 by Erik Hofman
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without

View file

@ -249,22 +249,21 @@ void walk_the_tree(size_t num, void *xid, char *tree)
void grep_file(unsigned num)
{
void *xrid;
void *xid;
xrid = xmlOpen(_filenames[num]);
if (xrid)
xid = xmlOpen(_filenames[num]);
if (xid)
{
void *xid = xmlMarkId(xrid);
void *xrid = xmlMarkId(xid);
walk_the_tree(num, xrid, _root);
free(xrid);
xrid = xid;
}
else
{
fprintf(stderr, "Error reading file '%s'\n", _filenames[num]);
}
xmlClose(xrid);
xmlClose(xid);
}
int