Diff of /trunk/src/gpx.c

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

revision 133 by harbaum, Mon Oct 12 20:27:55 2009 UTC revision 137 by harbaum, Mon Oct 19 18:21:20 2009 UTC
# Line 42  void gpx_free_wpt(wpt_t *wpt) { Line 42  void gpx_free_wpt(wpt_t *wpt) {
42    free(wpt);    free(wpt);
43  }  }
44    
45    void gpx_free_user(user_t *user) {
46      if(user->name) xmlFree(user->name);
47      free(user);
48    }
49    
50  void gpx_free_log(log_t *log) {  void gpx_free_log(log_t *log) {
51    if(log->finder)  xmlFree(log->finder);    if(log->finder)  gpx_free_user(log->finder);
52    if(log->text)    xmlFree(log->text);    if(log->text)    xmlFree(log->text);
53    free(log);    free(log);
54  }  }
# Line 61  void gpx_free_cache(cache_t *cache) { Line 66  void gpx_free_cache(cache_t *cache) {
66    
67    if(cache->id)                xmlFree(cache->id);    if(cache->id)                xmlFree(cache->id);
68    if(cache->name)              xmlFree(cache->name);    if(cache->name)              xmlFree(cache->name);
69    if(cache->owner)             xmlFree(cache->owner);    if(cache->owner)             gpx_free_user(cache->owner);
70    if(cache->short_description) xmlFree(cache->short_description);    if(cache->short_description) xmlFree(cache->short_description);
71    if(cache->long_description)  xmlFree(cache->long_description);    if(cache->long_description)  xmlFree(cache->long_description);
72    if(cache->hint)              xmlFree(cache->hint);    if(cache->hint)              xmlFree(cache->hint);
# Line 267  void gpx_display_log(log_t *log) { Line 272  void gpx_display_log(log_t *log) {
272    printf("  Log:\n");    printf("  Log:\n");
273    printf("    date:     %d.%d.%d\n", log->day, log->month, log->year);    printf("    date:     %d.%d.%d\n", log->day, log->month, log->year);
274    printf("    type:     %s\n", log_type_str[log->type+1]);    printf("    type:     %s\n", log_type_str[log->type+1]);
275    printf("    finder:   %s\n", log->finder);    printf("    finder:   %s\n", log->finder->name);
276    //  printf("    text:     %s\n", log->text);    //  printf("    text:     %s\n", log->text);
277  }  }
278    
# Line 279  void gpx_display_cache(cache_t *cache) { Line 284  void gpx_display_cache(cache_t *cache) {
284    printf("  name:       %s\n", cache->name);    printf("  name:       %s\n", cache->name);
285    printf("  latitude:   %f\n", cache->pos.lat);    printf("  latitude:   %f\n", cache->pos.lat);
286    printf("  longitude:  %f\n", cache->pos.lon);    printf("  longitude:  %f\n", cache->pos.lon);
287    printf("  owner:      %s\n", cache->owner);    printf("  owner:      %s\n", cache->owner->name);
288    printf("  type:       %s\n", cache_type_str[cache->type+1]);    printf("  type:       %s\n", cache_type_str[cache->type+1]);
289    printf("  container:  %s\n", cache_container_str[cache->container+1]);    printf("  container:  %s\n", cache_container_str[cache->container+1]);
290    printf("  difficulty: %.1f\n", cache->difficulty);    printf("  difficulty: %.1f\n", cache->difficulty);
# Line 326  static float xml_get_prop_float(xmlTextR Line 331  static float xml_get_prop_float(xmlTextR
331    return ret;    return ret;
332  }  }
333    
334    static unsigned int xml_get_prop_id(xmlTextReaderPtr reader) {
335      unsigned int ret = 0;
336      char *prop;
337      if((prop = (char*)xmlTextReaderGetAttribute(reader, BAD_CAST "id"))) {
338        ret = atoi(prop);
339        xmlFree(prop);
340      }
341      return ret;
342    }
343    
344  static int xml_prop_is(xmlTextReaderPtr reader, char *name, char *value,  static int xml_prop_is(xmlTextReaderPtr reader, char *name, char *value,
345                         int def_value) {                         int def_value) {
346    int match = def_value;    int match = def_value;
# Line 446  static log_t *process_gpx_wpt_gc_logs_lo Line 461  static log_t *process_gpx_wpt_gc_logs_lo
461            log->type = xml_str_search(reader, log_type_str, "log", 0);            log->type = xml_str_search(reader, log_type_str, "log", 0);
462          } else if((strcasecmp(name, "finder") == 0) ||          } else if((strcasecmp(name, "finder") == 0) ||
463                    (strcasecmp(name, "geocacher") == 0)) {                    (strcasecmp(name, "geocacher") == 0)) {
464            if(!log->finder) log->finder = process_text(reader);            if(!log->finder) {
465                log->finder = g_new0(user_t, 1);
466                log->finder->name = process_text(reader);
467                log->finder->id = xml_get_prop_id(reader);
468              }
469          } else if(strcasecmp(name, "text") == 0) {          } else if(strcasecmp(name, "text") == 0) {
470            if(!log->text) log->text = process_text(reader);            if(!log->text) log->text = process_text(reader);
471          } else          } else
# Line 648  static void process_gpx_wpt_gc(xmlTextRe Line 667  static void process_gpx_wpt_gc(xmlTextRe
667          if(strcasecmp(name, "name") == 0) {          if(strcasecmp(name, "name") == 0) {
668            if(!cache->name) cache->name = process_text(reader);            if(!cache->name) cache->name = process_text(reader);
669          } else if(strcasecmp(name, "owner") == 0) {          } else if(strcasecmp(name, "owner") == 0) {
670            if(!cache->owner) cache->owner = process_text(reader);            if(!cache->owner) {
671                cache->owner = g_new0(user_t, 1);
672                cache->owner->name = process_text(reader);
673                cache->owner->id = xml_get_prop_id(reader);
674              }
675          } else if(strcasecmp(name, "type") == 0) {          } else if(strcasecmp(name, "type") == 0) {
676            cache->type = xml_str_search(reader, cache_type_str,            cache->type = xml_str_search(reader, cache_type_str,
677                                         "cache type", CACHE_TYPE_UNKNOWN);                                         "cache type", CACHE_TYPE_UNKNOWN);

Legend:
Removed from v.133  
changed lines
  Added in v.137