map_set_attr(struct map *this_, struct attr *attr)
{
this_->attrs=attr_generic_set_attr(this_->attrs, attr);
+ if (this_->meth.map_set_attr)
+ this_->meth.map_set_attr(this_->priv, attr);
callback_list_call_attr_2(this_->attr_cbl, attr->type, this_, attr);
return 1;
}
void
map_rect_destroy(struct map_rect *mr)
{
- mr->m->meth.map_rect_destroy(mr->priv);
- g_free(mr);
+ if (mr) {
+ mr->m->meth.map_rect_destroy(mr->priv);
+ g_free(mr);
+ }
}
/**
* have a look into country.c for details. Because of that every map plugin has to accept a country item
* to be passed as "superior item".
*
- * Note: If you change something here, please make shure to also update the documentation of mapset_search_new()
+ * Note: If you change something here, please make sure to also update the documentation of mapset_search_new()
* in mapset.c!
*
* @param m The map that should be searched
this_=g_new0(struct map_search,1);
this_->m=m;
this_->search_attr=*search_attr;
- if (search_attr->type >= attr_country_all && search_attr->type <= attr_country_name)
+ if ((search_attr->type >= attr_country_all && search_attr->type <= attr_country_name) || search_attr->type == attr_country_id)
this_->priv=country_search_new(&this_->search_attr, partial);
else {
if (m->meth.map_search_new) {
if (! this_)
return NULL;
- if (this_->search_attr.type >= attr_country_all && this_->search_attr.type <= attr_country_name)
+ if ((this_->search_attr.type >= attr_country_all && this_->search_attr.type <= attr_country_name) || this_->search_attr.type == attr_country_id)
return country_search_get_item(this_->priv);
ret=this_->m->meth.map_search_get_item(this_->priv);
if (ret)
struct map_selection *
map_selection_rect_new(struct pcoord *center, int distance, int order)
{
- int i;
struct map_selection *ret=g_new0(struct map_selection, 1);
ret->order=order;
ret->range=item_range_all;
{
struct map_rect *mr=map_rect_new(map, NULL);
struct item *item;
- int i,count,max=16384;
- struct coord ca[max];
- struct attr attr;
-
- while ((item = map_rect_get_item(mr))) {
- count=item_coord_get(item, ca, item->type < type_line ? 1: max);
- if (item->type < type_line)
- fprintf(out,"mg:0x%x 0x%x ", ca[0].x, ca[0].y);
- fprintf(out,"%s", item_to_name(item->type));
- while (item_attr_get(item, attr_any, &attr))
- fprintf(out," %s='%s'", attr_to_name(attr.type), attr_to_text(&attr, map, 1));
- fprintf(out,"\n");
- if (item->type >= type_line)
- for (i = 0 ; i < count ; i++)
- fprintf(out,"mg:0x%x 0x%x\n", ca[i].x, ca[i].y);
- }
+
+ while ((item = map_rect_get_item(mr)))
+ item_dump_filedesc(item, map, out);
map_rect_destroy(mr);
}
void
-map_dump_file(struct map *map, char *file)
+map_dump_file(struct map *map, const char *file)
{
FILE *f;
f=fopen(file,"w");
- map_dump_filedesc(map, f);
- fclose(f);
+ if (f) {
+ map_dump_filedesc(map, f);
+ fclose(f);
+ } else
+ dbg(0,"failed to open file '%s'\n",file);
}
void