]> git.mxchange.org Git - flightgear.git/commitdiff
Fix a bug in xmlGetString and honour the index attribtute 'n'
authorehofman <ehofman>
Wed, 17 Jun 2009 07:10:37 +0000 (07:10 +0000)
committerTim Moore <timoore@redhat.com>
Tue, 23 Jun 2009 08:54:08 +0000 (10:54 +0200)
utils/xmlgrep/printtree.c
utils/xmlgrep/xml.c

index 674a7d14aafc0d8b878244248435decc2da17bce..e4e8c490bda5244f1d986dd774465359e43d76cd 100644 (file)
@@ -4,7 +4,7 @@
 
 #include "xml.h"
 
-void print_xml(void *, char *, int);
+void print_xml(void *, char *, unsigned int);
 
 int main(int argc, char **argv)
 {
@@ -47,7 +47,7 @@ int main(int argc, char **argv)
   }
 }
 
-void print_xml(void *id, char *name, int len)
+void print_xml(void *id, char *name, unsigned int len)
 {
   void *xid = xmlMarkId(id);
   unsigned int i, num;
@@ -72,8 +72,21 @@ void print_xml(void *id, char *name, int len)
     {
       if (xmlNodeGetPos(id, xid, "*", i) != 0)
       {
-        int res, i = 4096 - len;
+        unsigned int res, i = 4096 - len;
         res = xmlNodeCopyName(xid, (char *)&name[len], i);
+        if (res)
+        {
+          unsigned int index = xmlAttributeGetInt(xid, "n");
+          if (index)
+          {
+            unsigned int pos = len+res;
+
+            name[pos++] = '[';
+            i = snprintf((char *)&name[pos], 4096-pos, "%i", index);
+            name[pos+i] = ']';
+            res += i+2;
+          }
+        }
         print_xml(xid, name, len+res);
       }
       else printf("error\n");
index 8faa1f9621f47f3cdc4502f76c64948c6c700563..5357ed81afd4d2706b9dffab66d81f3275dfac85 100644 (file)
@@ -465,10 +465,11 @@ xmlGetString(const void *id)
         char *ps;
 
         ps = xid->start;
-        len = xid->len;
+        len = xid->len-1;
         __xmlPrepareData(&ps, &len);
         if (len)
         {
+            len++;
             str = malloc(len+1);
             if (str)
             {