static xbt_edge_t new_xbt_graph_edge (xbt_graph_t graph, xbt_node_t s, xbt_node_t d, xbt_dict_t edges)
{
xbt_edge_t ret;
- char *name;
const char *sn = instr_node_name (s);
const char *dn = instr_node_name (d);
+ int len = strlen(sn)+strlen(dn)+1;
+ char *name = (char*)malloc(len * sizeof(char));
- name = bprintf ("%s%s", sn, dn);
- ret = xbt_dict_get_or_null (edges, name);
- if (ret) return ret;
- free (name);
- name = bprintf ("%s%s", dn, sn);
+
+ snprintf (name, len, "%s%s", sn, dn);
ret = xbt_dict_get_or_null (edges, name);
- if (ret) return ret;
+ if (ret == NULL){
+ snprintf (name, len, "%s%s", dn, sn);
+ ret = xbt_dict_get_or_null (edges, name);
+ }
- ret = xbt_graph_new_edge(graph, s, d, NULL);
- xbt_dict_set (edges, name, ret, NULL);
+ if (ret == NULL){
+ ret = xbt_graph_new_edge(graph, s, d, NULL);
+ xbt_dict_set (edges, name, ret, NULL);
+ }
+ free (name);
return ret;
}
xbt_dynar_foreach (route->link_list, cpt, link) {
char *link_name = ((link_CM02_t)link)->lmm_resource.generic_resource.name;
current = new_xbt_graph_node(graph, link_name, nodes);
+ new_xbt_graph_edge (graph, previous, current, edges);
//previous -> current
previous = current;
}
xbt_dict_t nodes = xbt_dict_new_homogeneous(NULL);
xbt_dict_t edges = xbt_dict_new_homogeneous(NULL);
recursiveXBTGraphExtraction (ret, nodes, edges, global_routing->root, PJ_container_get_root());
+ xbt_dict_free (&nodes);
+ xbt_dict_free (&edges);
return ret;
}