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; |
467 |
ret = xmlTextReaderRead(reader); |
ret = xmlTextReaderRead(reader); |
468 |
} |
} |
469 |
|
|
470 |
g_assert(0); |
gpx_free_log(log); |
471 |
return log; |
return NULL; |
472 |
} |
} |
473 |
|
|
474 |
static log_t *process_gpx_wpt_gc_logs(xmlTextReaderPtr reader) { |
static log_t *process_gpx_wpt_gc_logs(xmlTextReaderPtr reader) { |
517 |
ret = xmlTextReaderRead(reader); |
ret = xmlTextReaderRead(reader); |
518 |
} |
} |
519 |
|
|
520 |
g_assert(0); |
/* free the entire log chain */ |
521 |
return log_chain; |
while(log_chain) { |
522 |
|
log_t *next = log_chain->next; |
523 |
|
gpx_free_log(log_chain); |
524 |
|
log_chain = next; |
525 |
|
} |
526 |
|
|
527 |
|
return NULL; |
528 |
} |
} |
529 |
|
|
530 |
static tb_t *process_gpx_wpt_gc_tbs_travelbug(xmlTextReaderPtr reader) { |
static tb_t *process_gpx_wpt_gc_tbs_travelbug(xmlTextReaderPtr reader) { |
573 |
ret = xmlTextReaderRead(reader); |
ret = xmlTextReaderRead(reader); |
574 |
} |
} |
575 |
|
|
576 |
g_assert(0); |
gpx_free_tb(tb); |
577 |
return tb; |
return NULL; |
578 |
} |
} |
579 |
|
|
580 |
static tb_t *process_gpx_wpt_gc_tbs(xmlTextReaderPtr reader) { |
static tb_t *process_gpx_wpt_gc_tbs(xmlTextReaderPtr reader) { |
615 |
ret = xmlTextReaderRead(reader); |
ret = xmlTextReaderRead(reader); |
616 |
} |
} |
617 |
|
|
618 |
g_assert(0); |
while(tb) { |
619 |
return tb; |
tb_t *next = tb; |
620 |
|
gpx_free_tb(tb); |
621 |
|
tb = next; |
622 |
|
} |
623 |
|
|
624 |
|
return NULL; |
625 |
} |
} |
626 |
|
|
627 |
static void process_gpx_wpt_gc(xmlTextReaderPtr reader, cache_t *cache) { |
static void process_gpx_wpt_gc(xmlTextReaderPtr reader, cache_t *cache) { |
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); |
847 |
ret = xmlTextReaderRead(reader); |
ret = xmlTextReaderRead(reader); |
848 |
} |
} |
849 |
|
|
850 |
g_assert(0); |
gpx_free_cache(cache); |
851 |
return cache; |
return NULL; |
852 |
} |
} |
853 |
|
|
854 |
static void process_gpx(xmlTextReaderPtr reader, gpx_dialog_t *dialog, |
static gboolean process_gpx(xmlTextReaderPtr reader, gpx_dialog_t *dialog, |
855 |
gpx_t *gpx) { |
gpx_t *gpx) { |
856 |
|
|
857 |
/* no attributes of interest */ |
/* no attributes of interest */ |
858 |
|
|
863 |
while(*cache) cache = &(*cache)->next; |
while(*cache) cache = &(*cache)->next; |
864 |
|
|
865 |
const xmlChar *name = xmlTextReaderConstName(reader); |
const xmlChar *name = xmlTextReaderConstName(reader); |
866 |
g_assert(name); |
if(!name) return FALSE; |
867 |
|
|
868 |
/* read next node */ |
/* read next node */ |
869 |
int ret = xmlTextReaderRead(reader); |
int ret = xmlTextReaderRead(reader); |
893 |
case XML_READER_TYPE_END_ELEMENT: |
case XML_READER_TYPE_END_ELEMENT: |
894 |
/* end element must be for the current element */ |
/* end element must be for the current element */ |
895 |
g_assert(xmlTextReaderDepth(reader) == 0); |
g_assert(xmlTextReaderDepth(reader) == 0); |
896 |
return; |
return TRUE; |
897 |
break; |
break; |
898 |
|
|
899 |
default: |
default: |
902 |
ret = xmlTextReaderRead(reader); |
ret = xmlTextReaderRead(reader); |
903 |
} |
} |
904 |
|
|
905 |
g_assert(0); |
return FALSE; |
906 |
} |
} |
907 |
|
|
908 |
/* parse loc waypoint entry */ |
/* parse loc waypoint entry */ |
1362 |
|
|
1363 |
void gpx_pos_get_distance_str(char *str, int len, |
void gpx_pos_get_distance_str(char *str, int len, |
1364 |
pos_t p1, pos_t p2, int mil) { |
pos_t p1, pos_t p2, int mil) { |
1365 |
if(!p1.lat && !p1.lon) { |
if(isnan(p1.lat) || isnan(p1.lon)) { |
1366 |
snprintf(str, len, "---"); |
snprintf(str, len, "---"); |
1367 |
return; |
return; |
1368 |
} |
} |