Diff of /trunk/src/gpx.c

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

revision 101 by harbaum, Tue Sep 8 12:28:24 2009 UTC revision 138 by harbaum, Tue Oct 20 13:25:04 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("    id:       #%u\n", log->id);
277    //  printf("    text:     %s\n", log->text);    //  printf("    text:     %s\n", log->text);
278  }  }
279    
# Line 279  void gpx_display_cache(cache_t *cache) { Line 285  void gpx_display_cache(cache_t *cache) {
285    printf("  name:       %s\n", cache->name);    printf("  name:       %s\n", cache->name);
286    printf("  latitude:   %f\n", cache->pos.lat);    printf("  latitude:   %f\n", cache->pos.lat);
287    printf("  longitude:  %f\n", cache->pos.lon);    printf("  longitude:  %f\n", cache->pos.lon);
288    printf("  owner:      %s\n", cache->owner);    printf("  owner:      %s\n", cache->owner->name);
289    printf("  type:       %s\n", cache_type_str[cache->type+1]);    printf("  type:       %s\n", cache_type_str[cache->type+1]);
290    printf("  container:  %s\n", cache_container_str[cache->container+1]);    printf("  container:  %s\n", cache_container_str[cache->container+1]);
291    printf("  difficulty: %.1f\n", cache->difficulty);    printf("  difficulty: %.1f\n", cache->difficulty);
# Line 326  static float xml_get_prop_float(xmlTextR Line 332  static float xml_get_prop_float(xmlTextR
332    return ret;    return ret;
333  }  }
334    
335    static unsigned int xml_get_prop_id(xmlTextReaderPtr reader) {
336      unsigned int ret = 0;
337      char *prop;
338      if((prop = (char*)xmlTextReaderGetAttribute(reader, BAD_CAST "id"))) {
339        ret = atoi(prop);
340        xmlFree(prop);
341      }
342      return ret;
343    }
344    
345  static int xml_prop_is(xmlTextReaderPtr reader, char *name, char *value,  static int xml_prop_is(xmlTextReaderPtr reader, char *name, char *value,
346                         int def_value) {                         int def_value) {
347    int match = def_value;    int match = def_value;
# Line 425  static log_t *process_gpx_wpt_gc_logs_lo Line 441  static log_t *process_gpx_wpt_gc_logs_lo
441      return NULL;      return NULL;
442    
443    /* create a new log entry */    /* create a new log entry */
444    log_t *log = malloc(sizeof(log_t));    log_t *log = g_new0(log_t, 1);
445    memset(log, 0, sizeof(log_t));  
446      char *prop = (char*)xmlTextReaderGetAttribute(reader, BAD_CAST "id");
447      if(prop)
448        log->id = atoi(prop);
449    
450    /* process all sub-nodes */    /* process all sub-nodes */
451    int depth = xmlTextReaderDepth(reader);    int depth = xmlTextReaderDepth(reader);
# Line 446  static log_t *process_gpx_wpt_gc_logs_lo Line 465  static log_t *process_gpx_wpt_gc_logs_lo
465            log->type = xml_str_search(reader, log_type_str, "log", 0);            log->type = xml_str_search(reader, log_type_str, "log", 0);
466          } else if((strcasecmp(name, "finder") == 0) ||          } else if((strcasecmp(name, "finder") == 0) ||
467                    (strcasecmp(name, "geocacher") == 0)) {                    (strcasecmp(name, "geocacher") == 0)) {
468            if(!log->finder) log->finder = process_text(reader);            if(!log->finder) {
469                log->finder = g_new0(user_t, 1);
470                log->finder->name = process_text(reader);
471                log->finder->id = xml_get_prop_id(reader);
472              }
473          } else if(strcasecmp(name, "text") == 0) {          } else if(strcasecmp(name, "text") == 0) {
474            if(!log->text) log->text = process_text(reader);            if(!log->text) log->text = process_text(reader);
475          } else          } else
# Line 542  static tb_t *process_gpx_wpt_gc_tbs_trav Line 565  static tb_t *process_gpx_wpt_gc_tbs_trav
565    else    else
566      tb->ref = strdup("<NONE>");      tb->ref = strdup("<NONE>");
567    
568      if((prop = (char*)xmlTextReaderGetAttribute(reader, BAD_CAST "id")))
569        tb->id = atoi(prop);
570    
571    /* process all sub-nodes */    /* process all sub-nodes */
572    int depth = xmlTextReaderDepth(reader);    int depth = xmlTextReaderDepth(reader);
573    int ret = xmlTextReaderRead(reader);    int ret = xmlTextReaderRead(reader);
# Line 645  static void process_gpx_wpt_gc(xmlTextRe Line 671  static void process_gpx_wpt_gc(xmlTextRe
671          if(strcasecmp(name, "name") == 0) {          if(strcasecmp(name, "name") == 0) {
672            if(!cache->name) cache->name = process_text(reader);            if(!cache->name) cache->name = process_text(reader);
673          } else if(strcasecmp(name, "owner") == 0) {          } else if(strcasecmp(name, "owner") == 0) {
674            if(!cache->owner) cache->owner = process_text(reader);            if(!cache->owner) {
675                cache->owner = g_new0(user_t, 1);
676                cache->owner->name = process_text(reader);
677                cache->owner->id = xml_get_prop_id(reader);
678              }
679          } else if(strcasecmp(name, "type") == 0) {          } else if(strcasecmp(name, "type") == 0) {
680            cache->type = xml_str_search(reader, cache_type_str,            cache->type = xml_str_search(reader, cache_type_str,
681                                         "cache type", CACHE_TYPE_UNKNOWN);                                         "cache type", CACHE_TYPE_UNKNOWN);

Legend:
Removed from v.101  
changed lines
  Added in v.138