Fix:core: No longer exits or crashes when no mapsets are defined. Ticket #238
authorsteven_s <steven_s@ffa7fe5e-494d-0410-b361-a75ebd5db220>
Thu, 30 Oct 2008 01:46:32 +0000 (01:46 +0000)
committersteven_s <steven_s@ffa7fe5e-494d-0410-b361-a75ebd5db220>
Thu, 30 Oct 2008 01:46:32 +0000 (01:46 +0000)
git-svn-id: https://navit.svn.sourceforge.net/svnroot/navit/trunk@1618 ffa7fe5e-494d-0410-b361-a75ebd5db220

navit/navit/mapset.c
navit/navit/navit.c

index 5ebec02..e1a8f61 100644 (file)
@@ -119,10 +119,12 @@ struct mapset_handle {
 struct mapset_handle *
 mapset_open(struct mapset *ms)
 {
-       struct mapset_handle *ret;
-
-       ret=g_new(struct mapset_handle, 1);
-       ret->l=ms->maps;
+       struct mapset_handle *ret=NULL;
+       if(ms)
+       {
+               ret=g_new(struct mapset_handle, 1);
+               ret->l=ms->maps;
+       }
 
        return ret;
 }
@@ -143,7 +145,7 @@ struct map * mapset_next(struct mapset_handle *msh, int active)
        struct attr active_attr;
 
        for (;;) {
-               if (!msh->l)
+               if (!msh || !msh->l)
                        return NULL;
                ret=msh->l->data;
                msh->l=g_list_next(msh->l);
@@ -207,12 +209,19 @@ mapset_search_new(struct mapset *ms, struct item *item, struct attr *search_attr
        struct mapset_search *this;
        dbg(1,"enter(%p,%p,%p,%d)\n", ms, item, search_attr, partial);
        this=g_new0(struct mapset_search,1);
-       this->map=ms->maps;
-       this->item=item;
-       this->search_attr=search_attr;
-       this->partial=partial;
-       this->ms=map_search_new(this->map->data, item, search_attr, partial);
-       return this;
+       if(this != NULL && ms!=NULL )
+        {
+               this->map=ms->maps;
+               this->item=item;
+               this->search_attr=search_attr;
+               this->partial=partial;
+               this->ms=map_search_new(this->map->data, item, search_attr, partial);
+               return this;
+       }
+       else
+       {
+               return NULL;
+       }
 }
 
 /**
@@ -231,7 +240,7 @@ mapset_search_get_item(struct mapset_search *this)
        struct item *ret=NULL;
        struct attr active_attr;
 
-       while (!this->ms || !(ret=map_search_get_item(this->ms))) { /* The current map has no more items to be returned */
+       while ((this) && (!this->ms || !(ret=map_search_get_item(this->ms)))) { /* The current map has no more items to be returned */
                if (this->search_attr->type >= attr_country_all && this->search_attr->type <= attr_country_name)
                        break;
                for (;;) {
index a43a917..cebc206 100644 (file)
@@ -157,7 +157,7 @@ navit_get_mapset(struct navit *this_)
        } else {
                dbg(0,"No mapsets enabled! Is it on purpose? Navit can't draw a map. Please check your navit.xml\n");
        }
-       exit(-1);
+       return NULL;
 }
 
 struct tracking *