/** * i2o_bus_remove - remove the I2O Bus Adapter device from the system again * @dev: I2O Bus Adapter device which should be removed * * Always returns 0. */ static int i2o_bus_remove(struct device *dev) { struct i2o_device *i2o_dev = to_i2o_device(dev); device_remove_file(dev, &dev_attr_scan); put_device(dev); osm_info("device removed (TID: %03x)\n", i2o_dev->lct_data.tid); return 0; };
/** * i2o_bus_probe - verify if dev is a I2O Bus Adapter device and install it * @dev: device to verify if it is a I2O Bus Adapter device * * Because we want all Bus Adapters always return 0. * Except when we fail. Then we are sad. * * Returns 0, except when we fail to excel. */ static int i2o_bus_probe(struct device *dev) { struct i2o_device *i2o_dev = to_i2o_device(get_device(dev)); int rc; rc = device_create_file(dev, &dev_attr_scan); if (rc) goto err_out; osm_info("device added (TID: %03x)\n", i2o_dev->lct_data.tid); return 0; err_out: put_device(dev); return rc; };
static GList * process_boundaries_setup(FILE *boundaries, struct relations *relations) { struct item_bin *ib; GList *boundaries_list = NULL; struct relations_func *relations_func; long long b_counter_1 = 0; // long long b_counter_2 = 0; //fprintf(stderr,"process_boundaries_setup:001\n"); relations_func = relations_func_new(process_boundaries_member, NULL); while ((ib = read_item(boundaries, 0))) { //fprintf(stderr,"********DUMP b ***********\n"); //dump_itembin(ib); //fprintf(stderr,"********DUMP b ***********\n"); char *member = NULL; struct boundary *boundary=g_new0(struct boundary, 1); char *admin_level = osm_tag_value(ib, "admin_level"); char *iso = osm_tag_value(ib, "ISO3166-1"); b_counter_1++; if ((b_counter_1 % 500) == 0) { fprintf(stderr,"boundaries:B:%lld\n", b_counter_1); } //fprintf(stderr,"process_boundaries_setup:002\n"); //fprintf(stderr,"== b:%s %s ==\n", iso, admin_level); /* disable spain for now since it creates a too large index */ if (admin_level && !strcmp(admin_level, "2") && (!iso || strcasecmp(iso, "es"))) { if (iso) { struct country_table *country = country_from_iso2(iso); if (!country) { osm_warning("relation", item_bin_get_relationid(ib), 0, "Country Boundary contains unknown ISO3166-1 value '%s'\n", iso); } else { boundary->iso2 = g_strdup(iso); osm_info("relation", item_bin_get_relationid(ib), 0, "Country Boundary for '%s'\n", iso); } boundary->country = country; } else { osm_warning("relation", item_bin_get_relationid(ib), 0, "Country Boundary doesn't contain an ISO3166-1 tag\n"); } } //b_counter_2 = 0; while ((member = item_bin_get_attr(ib, attr_osm_member, member))) { //fprintf(stderr,"process_boundaries_setup:005\n"); //fprintf(stderr,"********DUMP b ***********\n"); //dump_itembin(ib); //fprintf(stderr,"********DUMP b ***********\n"); //b_counter_2++; //fprintf(stderr,"boundaries:M:%lld\n", b_counter_2); long long wayid; int read = 0; if (sscanf(member, "2:%Ld:%n", &wayid, &read) >= 1) { char *rolestr = member + read; enum geom_poly_segment_type role; if (!strcmp(rolestr, "outer") || !strcmp(rolestr, "exclave")) role = geom_poly_segment_type_way_outer; else if (!strcmp(rolestr, "inner") || !strcmp(rolestr, "enclave")) role = geom_poly_segment_type_way_inner; else if (!strcmp(rolestr, "")) role = geom_poly_segment_type_way_unknown; else { osm_warning("relation", item_bin_get_relationid(ib), 0, "Unknown role %s in member ", rolestr); osm_warning("way", wayid, 1, "\n"); role = geom_poly_segment_type_none; } //fprintf(stderr,"process_boundaries_setup:006 %s %Ld\n", rolestr,wayid); relations_add_func(relations, relations_func, boundary, (gpointer) role, 2, wayid); } } boundary->ib = item_bin_dup(ib); boundaries_list = g_list_append(boundaries_list, boundary); } return boundaries_list; }
static GList * process_boundaries_setup(FILE *boundaries, struct relations *relations) { struct item_bin *ib; GList *boundaries_list=NULL; struct relations_func *relations_func; relations_func=relations_func_new(process_boundaries_member, NULL); while ((ib=read_item(boundaries))) { char *member=NULL; struct boundary *boundary=g_new0(struct boundary, 1); char *admin_level=osm_tag_value(ib, "admin_level"); char *iso=osm_tag_value(ib, "ISO3166-1"); int has_subrelations=0; int has_outer_ways=0; processed_relations++; if(!iso) iso=osm_tag_value(ib, "iso3166-1:alpha2"); if (admin_level && !strcmp(admin_level, "2")) { if(!iso) { char *int_name=osm_tag_value(ib,"int_name"); if(int_name && !strcmp(int_name,"France")) iso="FR"; } if (iso) { struct country_table *country=country_from_iso2(iso); if (!country) osm_warning("relation",item_bin_get_relationid(ib),0,"Country Boundary contains unknown ISO3166-1 value '%s'\n",iso); else { boundary->iso2=g_strdup(iso); osm_info("relation",item_bin_get_relationid(ib),0,"Country Boundary for '%s'\n",iso); } boundary->country=country; } else osm_warning("relation",item_bin_get_relationid(ib),0,"Country Boundary doesn't contain an ISO3166-1 tag\n"); } while ((member=item_bin_get_attr(ib, attr_osm_member, member))) { long long osm_id; int read=0; enum relation_member_type member_type; int member_type_numeric; char *rolestr; if (sscanf(member,RELATION_MEMBER_PARSE_FORMAT,&member_type_numeric,&osm_id,&read) < 2) continue; member_type=(enum relation_member_type)member_type_numeric; rolestr=member+read; if(member_type==rel_member_node) { if(!strcmp(rolestr,"admin_centre") || !strcmp(rolestr,"admin_center")) boundary->admin_centre=osm_id; } if(member_type==rel_member_way) { enum geom_poly_segment_type role; if (!strcmp(rolestr,"outer") || !strcmp(rolestr,"exclave")) { has_outer_ways=1; role=geom_poly_segment_type_way_outer; } else if (!strcmp(rolestr,"inner") || !strcmp(rolestr,"enclave")) role=geom_poly_segment_type_way_inner; else if (!strcmp(rolestr,"")) role=geom_poly_segment_type_way_unknown; else { osm_warning("relation",item_bin_get_relationid(ib),0,"Unknown role %s in member ",rolestr); osm_warning("way",osm_id,1,"\n"); role=geom_poly_segment_type_none; } relations_add_relation_member_entry(relations, relations_func, boundary, (gpointer)role, rel_member_way, osm_id); } if(member_type==rel_member_relation) { if (!strcmp(rolestr,"outer") || !strcmp(rolestr,"exclave") || !strcmp(rolestr,"inner") || !strcmp(rolestr,"enclave")) has_subrelations++; } } if(boundary->iso2 && has_subrelations) osm_warning("relation",item_bin_get_relationid(ib),0,"Country boundary '%s' has %d relations as boundary segments. These are not supported yet.\n", boundary->iso2, has_subrelations); if(boundary->iso2 && !has_outer_ways) { osm_warning("relation",item_bin_get_relationid(ib),0,"Skipping country boundary for '%s' because it has no outer ways.\n", boundary->iso2); g_free(boundary->iso2); boundary->iso2=NULL; } boundary->ib=item_bin_dup(ib); boundaries_list=g_list_append(boundaries_list, boundary); } return boundaries_list; }