]> mj.ucw.cz Git - leo.git/blobdiff - osm.c
Low-level parts of text rotation
[leo.git] / osm.c
diff --git a/osm.c b/osm.c
index 325b592322287858a064f46faa10bd538b5fac96..a9c499e69152183d7d2545162a770f9f15535d59 100644 (file)
--- a/osm.c
+++ b/osm.c
@@ -74,6 +74,7 @@ static void *osm_obj_new(enum osm_object_type type, osm_id_t id, uns size)
 
   struct osm_object *o = mp_alloc_zero(osm_this->pool, size);
   clist_add_tail(&osm_this->obj_list[type], &o->n);
+  osm_this->obj_cnt[type]++;
   o->type = type;
   o->id = id;
   clist_init(&o->tags);
@@ -381,7 +382,7 @@ static void mpg_walk_boundary(struct osm_multipolygon *m, bool inner)
          clist_init(&b->nodes);
 
          struct mpg_vertex *w = v;
-         while (!w->visited)
+         while (w && !w->visited)
            {
              w->visited = 1;
              struct osm_ref *f = mp_alloc(osm_this->pool, sizeof(*f));
@@ -411,7 +412,9 @@ static void mpg_walk_boundary(struct osm_multipolygon *m, bool inner)
              w = dest;
            }
 
-         if (w != v)
+         if (!w)
+           osm_obj_warn(&mpg_current->o, "Boundary not closed");
+         else if (w != v)
            osm_obj_warn(&mpg_current->o, "Boundary not closed at node %ju", (uintmax_t) w->o->id);
 
          struct osm_ref *f = mp_alloc(osm_this->pool, sizeof(*f));
@@ -585,3 +588,11 @@ void osm_dump(void)
   osm_relation_dump_all();
   osm_multipolygon_dump_all();
 }
+
+void osm_stats(void)
+{
+  msg(L_INFO, "Loaded %u nodes, %u ways, %u relations",
+    osm_this->obj_cnt[OSM_TYPE_NODE],
+    osm_this->obj_cnt[OSM_TYPE_WAY],
+    osm_this->obj_cnt[OSM_TYPE_RELATION]);
+}