--- trunk/src/gpx.c 2009/10/12 20:27:55 133 +++ trunk/src/gpx.c 2009/10/13 14:36:07 134 @@ -42,6 +42,11 @@ free(wpt); } +void gpx_free_user(user_t *user) { + if(user->name) xmlFree(user->name); + free(user); +} + void gpx_free_log(log_t *log) { if(log->finder) xmlFree(log->finder); if(log->text) xmlFree(log->text); @@ -61,7 +66,7 @@ if(cache->id) xmlFree(cache->id); if(cache->name) xmlFree(cache->name); - if(cache->owner) xmlFree(cache->owner); + if(cache->owner) gpx_free_user(cache->owner); if(cache->short_description) xmlFree(cache->short_description); if(cache->long_description) xmlFree(cache->long_description); if(cache->hint) xmlFree(cache->hint); @@ -279,7 +284,7 @@ printf(" name: %s\n", cache->name); printf(" latitude: %f\n", cache->pos.lat); printf(" longitude: %f\n", cache->pos.lon); - printf(" owner: %s\n", cache->owner); + printf(" owner: %s\n", cache->owner->name); printf(" type: %s\n", cache_type_str[cache->type+1]); printf(" container: %s\n", cache_container_str[cache->container+1]); printf(" difficulty: %.1f\n", cache->difficulty); @@ -326,6 +331,16 @@ return ret; } +static unsigned int xml_get_prop_id(xmlTextReaderPtr reader) { + unsigned int ret = 0; + char *prop; + if((prop = (char*)xmlTextReaderGetAttribute(reader, BAD_CAST "id"))) { + ret = atoi(prop); + xmlFree(prop); + } + return ret; +} + static int xml_prop_is(xmlTextReaderPtr reader, char *name, char *value, int def_value) { int match = def_value; @@ -648,7 +663,11 @@ if(strcasecmp(name, "name") == 0) { if(!cache->name) cache->name = process_text(reader); } else if(strcasecmp(name, "owner") == 0) { - if(!cache->owner) cache->owner = process_text(reader); + if(!cache->owner) { + cache->owner = g_new0(user_t, 1); + cache->owner->name = process_text(reader); + cache->owner->id = xml_get_prop_id(reader); + } } else if(strcasecmp(name, "type") == 0) { cache->type = xml_str_search(reader, cache_type_str, "cache type", CACHE_TYPE_UNKNOWN);