]> git.mxchange.org Git - flightgear.git/commitdiff
Some small updates; fix typo's and fix a small memory leak
authorehofman <ehofman>
Mon, 30 Jun 2008 07:30:02 +0000 (07:30 +0000)
committerehofman <ehofman>
Mon, 30 Jun 2008 07:30:02 +0000 (07:30 +0000)
Improve the documentation in README

utils/xmlgrep/README
utils/xmlgrep/xml.c
utils/xmlgrep/xmlgrep.c

index 29be06bb32e79ea88982c47c95a65f997b38e501..81757de9d388f4e6b052b06ea405ac908590282e 100644 (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 *);
index b464724e01221981d975daea7b5b54616055fae0..ccc1ccf8224d0b0649d6f052c627a6c6127ba1e5 100644 (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
index 5f8e92cd0ece948466c3d3f43bf7c92d103256b7..139f1ae8d5a312b108e3f1d4f669bb1d25b1400d 100644 (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