--- trunk/src/gpx.c 2009/08/23 19:38:15 73 +++ trunk/src/gpx.c 2009/08/24 09:23:36 74 @@ -463,8 +463,8 @@ ret = xmlTextReaderRead(reader); } - g_assert(0); - return log; + gpx_free_log(log); + return NULL; } static log_t *process_gpx_wpt_gc_logs(xmlTextReaderPtr reader) { @@ -513,8 +513,14 @@ ret = xmlTextReaderRead(reader); } - g_assert(0); - return log_chain; + /* free the entire log chain */ + while(log_chain) { + log_t *next = log_chain->next; + gpx_free_log(log_chain); + log_chain = next; + } + + return NULL; } static tb_t *process_gpx_wpt_gc_tbs_travelbug(xmlTextReaderPtr reader) { @@ -563,8 +569,8 @@ ret = xmlTextReaderRead(reader); } - g_assert(0); - return tb; + gpx_free_tb(tb); + return NULL; } static tb_t *process_gpx_wpt_gc_tbs(xmlTextReaderPtr reader) { @@ -605,8 +611,13 @@ ret = xmlTextReaderRead(reader); } - g_assert(0); - return tb; + while(tb) { + tb_t *next = tb; + gpx_free_tb(tb); + tb = next; + } + + return NULL; } static void process_gpx_wpt_gc(xmlTextReaderPtr reader, cache_t *cache) { @@ -831,12 +842,12 @@ ret = xmlTextReaderRead(reader); } - g_assert(0); - return cache; + gpx_free_cache(cache); + return NULL; } -static void process_gpx(xmlTextReaderPtr reader, gpx_dialog_t *dialog, - gpx_t *gpx) { +static gboolean process_gpx(xmlTextReaderPtr reader, gpx_dialog_t *dialog, + gpx_t *gpx) { /* no attributes of interest */ @@ -847,7 +858,7 @@ while(*cache) cache = &(*cache)->next; const xmlChar *name = xmlTextReaderConstName(reader); - g_assert(name); + if(!name) return FALSE; /* read next node */ int ret = xmlTextReaderRead(reader); @@ -877,7 +888,7 @@ case XML_READER_TYPE_END_ELEMENT: /* end element must be for the current element */ g_assert(xmlTextReaderDepth(reader) == 0); - return; + return TRUE; break; default: @@ -886,7 +897,7 @@ ret = xmlTextReaderRead(reader); } - g_assert(0); + return FALSE; } /* parse loc waypoint entry */