Fix:osd_core:Prevent a crash
authormartin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220>
Wed, 25 Feb 2009 13:58:21 +0000 (13:58 +0000)
committermartin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220>
Wed, 25 Feb 2009 13:58:21 +0000 (13:58 +0000)
git-svn-id: https://navit.svn.sourceforge.net/svnroot/navit/trunk@2072 ffa7fe5e-494d-0410-b361-a75ebd5db220

navit/navit/osd/core/osd_core.c
navit/navit/track.c
navit/navit/track.h

index bfaf7a6..7df3c48 100644 (file)
@@ -890,7 +890,7 @@ osd_text_draw(struct osd_text *this, struct navit *navit, struct vehicle *v)
        struct point p, p2[4];
        char *str,*next,*start,*end,*key,*subkey,*index,*value;
        int do_draw = 0;
-       struct attr attr, vehicle_attr, flags_attr, maxspeed_attr;
+       struct attr attr, vehicle_attr, maxspeed_attr;
        struct navigation *nav = NULL;
        struct tracking *tracking = NULL;
        struct route *route = NULL;
@@ -964,11 +964,9 @@ osd_text_draw(struct osd_text *this, struct navit *navit, struct vehicle *v)
                                        item=tracking_get_current_item(tracking);
                                        if (item && !strcmp(key,"route_speed")) {
                                                double routespeed = -1;
-                                               if (item_attr_get(item, attr_flags, &flags_attr) && (flags_attr.u.num & AF_SPEED_LIMIT)) {
-                                                       if (item_attr_get(item, attr_maxspeed, &maxspeed_attr)) {
-                                                               routespeed = maxspeed_attr.u.num;
-                                                               value = format_speed(routespeed, "");
-                                                       }
+                                               if ((tracking_get_current_flags(tracking) & AF_SPEED_LIMIT) && tracking_get_current_attr(tracking, attr_maxspeed, &maxspeed_attr)) {
+                                                       routespeed = maxspeed_attr.u.num;
+                                                       value = format_speed(routespeed, "");
                                                } 
 
                                                if ((routespeed == -1) && route && (speedlist=route_get_speedlist(route))) {
index 071c98f..848494c 100644 (file)
@@ -121,6 +121,14 @@ tracking_get_current_item(struct tracking *_this)
        return &_this->curr_line->street->item;
 }
 
+int
+tracking_get_current_flags(struct tracking *_this)
+{
+       if (! _this->curr_line || ! _this->curr_line->street)
+               return NULL;
+       return &_this->curr_line->street->flags;
+}
+
 static void
 tracking_get_angles(struct tracking_line *tl)
 {
index fe7ef90..1a26761 100644 (file)
@@ -37,6 +37,7 @@ void tracking_set_mapset(struct tracking *this_, struct mapset *ms);
 void tracking_set_route(struct tracking *this_, struct route *rt);
 int tracking_get_current_attr(struct tracking *_this, enum attr_type type, struct attr *attr);
 struct item *tracking_get_current_item(struct tracking *_this);
+int tracking_get_current_flags(struct tracking *_this);
 void tracking_destroy(struct tracking *tr);
 struct map * tracking_get_map(struct tracking *this_);
 void tracking_init(void);