Diff of /trunk/src/gpx.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 100 by harbaum, Mon Aug 24 09:23:36 2009 UTC revision 101 by harbaum, Tue Sep 8 12:28:24 2009 UTC
# Line 360  static gboolean skip_element(xmlTextRead Line 360  static gboolean skip_element(xmlTextRead
360    
361  static char *process_text(xmlTextReaderPtr reader) {  static char *process_text(xmlTextReaderPtr reader) {
362    char *text = NULL;    char *text = NULL;
363    int depth = xmlTextReaderDepth(reader);  
364    int ret = xmlTextReaderRead(reader);    if(!xmlTextReaderIsEmptyElement(reader)) {
365    while((ret == 1) &&  
366          ((xmlTextReaderNodeType(reader) != XML_READER_TYPE_END_ELEMENT) ||      int depth = xmlTextReaderDepth(reader);
367           (xmlTextReaderDepth(reader) != depth))) {      int ret = xmlTextReaderRead(reader);
368        while((ret == 1) &&
369      /* found a text fragment */            ((xmlTextReaderNodeType(reader) != XML_READER_TYPE_END_ELEMENT) ||
370      if((xmlTextReaderNodeType(reader) == XML_READER_TYPE_TEXT) ||             (xmlTextReaderDepth(reader) != depth))) {
371         (xmlTextReaderNodeType(reader) == XML_READER_TYPE_CDATA)) {  
372        char *frag = (char*)xmlTextReaderConstValue(reader);        /* found a text fragment */
373          if((xmlTextReaderNodeType(reader) == XML_READER_TYPE_TEXT) ||
374        if(!text) text = strdup(frag);           (xmlTextReaderNodeType(reader) == XML_READER_TYPE_CDATA)) {
375        else {          char *frag = (char*)xmlTextReaderConstValue(reader);
376          char *old = text;  
377          text = malloc(strlen(old) + strlen(frag) + 1);          if(!text) text = strdup(frag);
378          strcpy(text, old);          else {
379          strcat(text, frag);            char *old = text;
380          free(old);            text = malloc(strlen(old) + strlen(frag) + 1);
381              strcpy(text, old);
382              strcat(text, frag);
383              free(old);
384            }
385        }        }
386          ret = xmlTextReaderRead(reader);
387      }      }
     ret = xmlTextReaderRead(reader);  
388    }    }
389    
390    return text;    return text;
# Line 664  static void process_gpx_wpt_gc(xmlTextRe Line 668  static void process_gpx_wpt_gc(xmlTextRe
668                    (strcasecmp(name, "hints") == 0))     {                    (strcasecmp(name, "hints") == 0))     {
669            if(!cache->hint) {            if(!cache->hint) {
670              cache->hint = process_text(reader);              cache->hint = process_text(reader);
671    
672              /* often hints aren't more than just a bunch of blanks ... */              /* often hints aren't more than just a bunch of blanks ... */
673              if(cache->hint && all_is_white(cache->hint)) {              if(cache->hint && all_is_white(cache->hint)) {
674                free(cache->hint);                free(cache->hint);

Legend:
Removed from v.100  
changed lines
  Added in v.101