--- trunk/src/gpx.c 2009/08/24 09:23:36 74 +++ trunk/src/gpx.c 2009/09/08 12:28:24 101 @@ -360,27 +360,31 @@ static char *process_text(xmlTextReaderPtr reader) { char *text = NULL; - int depth = xmlTextReaderDepth(reader); - int ret = xmlTextReaderRead(reader); - while((ret == 1) && - ((xmlTextReaderNodeType(reader) != XML_READER_TYPE_END_ELEMENT) || - (xmlTextReaderDepth(reader) != depth))) { - - /* found a text fragment */ - if((xmlTextReaderNodeType(reader) == XML_READER_TYPE_TEXT) || - (xmlTextReaderNodeType(reader) == XML_READER_TYPE_CDATA)) { - char *frag = (char*)xmlTextReaderConstValue(reader); - - if(!text) text = strdup(frag); - else { - char *old = text; - text = malloc(strlen(old) + strlen(frag) + 1); - strcpy(text, old); - strcat(text, frag); - free(old); + + if(!xmlTextReaderIsEmptyElement(reader)) { + + int depth = xmlTextReaderDepth(reader); + int ret = xmlTextReaderRead(reader); + while((ret == 1) && + ((xmlTextReaderNodeType(reader) != XML_READER_TYPE_END_ELEMENT) || + (xmlTextReaderDepth(reader) != depth))) { + + /* found a text fragment */ + if((xmlTextReaderNodeType(reader) == XML_READER_TYPE_TEXT) || + (xmlTextReaderNodeType(reader) == XML_READER_TYPE_CDATA)) { + char *frag = (char*)xmlTextReaderConstValue(reader); + + if(!text) text = strdup(frag); + else { + char *old = text; + text = malloc(strlen(old) + strlen(frag) + 1); + strcpy(text, old); + strcat(text, frag); + free(old); + } } + ret = xmlTextReaderRead(reader); } - ret = xmlTextReaderRead(reader); } return text; @@ -664,6 +668,7 @@ (strcasecmp(name, "hints") == 0)) { if(!cache->hint) { cache->hint = process_text(reader); + /* often hints aren't more than just a bunch of blanks ... */ if(cache->hint && all_is_white(cache->hint)) { free(cache->hint);