X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/3406010cd31d6455d8ab9f96b312920dac884062..55c2d5b5314f3007202c67003eb99d7d92dedb7e:/src/xbt/graph.c diff --git a/src/xbt/graph.c b/src/xbt/graph.c index 2f2ebad184..e56e413938 100644 --- a/src/xbt/graph.c +++ b/src/xbt/graph.c @@ -6,8 +6,9 @@ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ -#include #include "simgrid_config.h" /* getline */ +#include +#include #include "xbt/sysdep.h" #include "xbt/log.h" #include "xbt/graph.h" @@ -143,12 +144,12 @@ void xbt_graph_free_graph(xbt_graph_t g, xbt_dynar_free(&(node->out)); xbt_dynar_free(&(node->in)); if (node_free_function) - (*node_free_function) (node->data); + node_free_function(node->data); } xbt_dynar_foreach(g->edges, cursor, edge) { if (edge_free_function) - (*edge_free_function) (edge->data); + edge_free_function(edge->data); } xbt_dynar_foreach(g->nodes, cursor, node) @@ -159,7 +160,7 @@ void xbt_graph_free_graph(xbt_graph_t g, free(edge); xbt_dynar_free(&(g->edges)); if (graph_free_function) - (*graph_free_function) (g->data); + graph_free_function(g->data); free(g); xbt_graph_parse_lex_destroy(); return; @@ -189,7 +190,7 @@ void xbt_graph_free_node(xbt_graph_t g, xbt_node_t n, } if ((node_free_function) && (n->data)) - (*node_free_function) (n->data); + node_free_function(n->data); cursor = 0; xbt_dynar_foreach(g->nodes, cursor, node) @@ -213,7 +214,7 @@ void xbt_graph_free_edge(xbt_graph_t g, xbt_edge_t e, xbt_edge_t edge = NULL; if ((free_function) && (e->data)) - (*free_function) (e->data); + free_function(e->data); xbt_dynar_foreach(g->edges, cursor, edge) { if (edge == e) { @@ -560,7 +561,7 @@ static void __parse_graph_begin(void) else parsed_graph = xbt_graph_new_graph(0, NULL); - parsed_nodes = xbt_dict_new(); + parsed_nodes = xbt_dict_new_homogeneous(NULL); } static void __parse_graph_end(void) @@ -577,10 +578,8 @@ static void __parse_node(void) if (__parse_node_label_and_data) node->data = __parse_node_label_and_data(node, A_graphxml_node_label, A_graphxml_node_data); - xbt_graph_parse_get_double(&(node->position_x), - A_graphxml_node_position_x); - xbt_graph_parse_get_double(&(node->position_y), - A_graphxml_node_position_y); + node->position_x = xbt_graph_parse_get_double(A_graphxml_node_position_x); + node->position_y = xbt_graph_parse_get_double(A_graphxml_node_position_y); xbt_dict_set(parsed_nodes, A_graphxml_node_name, (void *) node, NULL); } @@ -598,7 +597,7 @@ static void __parse_edge(void) edge->data = __parse_edge_label_and_data(edge, A_graphxml_edge_label, A_graphxml_edge_data); - xbt_graph_parse_get_double(&(edge->length), A_graphxml_edge_length); + edge->length = xbt_graph_parse_get_double(A_graphxml_edge_length); XBT_DEBUG("", (char *) (edge->src)->data, @@ -628,8 +627,8 @@ xbt_graph_t xbt_graph_read(const char *filename, ETag_graphxml_edge_fun = __parse_edge; xbt_graph_parse_open(filename); - int res; - res = (*xbt_graph_parse) (); + _XBT_GNUC_UNUSED int res; + res = xbt_graph_parse(); xbt_assert(!res, "Parse error in %s", filename); xbt_graph_parse_close(); @@ -736,13 +735,15 @@ xbt_graph_t xbt_graph_load (const char *filename) file = fopen (filename, "r"); xbt_assert(file, "Failed to open %s \n", filename); - xbt_dict_t nodes_dict = xbt_dict_new (); + xbt_dict_t nodes_dict = xbt_dict_new_homogeneous(NULL); xbt_graph_t ret = xbt_graph_new_graph (0, NULL); //read the number of nodes size_t size; char *nnodes_str = NULL; read = getline (&nnodes_str, &size, file); + if (read == -1) + THROWF(system_error, 0, "getline failed to read the number of nodes (errno = %d)", errno); int i, nnodes = atoi (nnodes_str); free (nnodes_str); @@ -750,6 +751,8 @@ xbt_graph_t xbt_graph_load (const char *filename) for (i = 0; i < nnodes; i++){ char *node_str = NULL; read = getline (&node_str, &size, file); + if (read == -1) + THROWF(system_error, 0, "getline failed to read all nodes (errno = %d)", errno); xbt_node_t n; char *name = xbt_strdup (node_str); xbt_str_subst (name, '\n', '\0', 0); @@ -761,6 +764,8 @@ xbt_graph_t xbt_graph_load (const char *filename) //read the number of edges char *nedges_str = NULL; read = getline (&nedges_str, &size, file); + if (read == -1) + THROWF(system_error, 0, "getline failed to read the number of edges (errno = %d)", errno); int nedges = atoi (nedges_str); free (nedges_str); @@ -768,6 +773,8 @@ xbt_graph_t xbt_graph_load (const char *filename) for (i = 0; i < nedges; i++){ char *edge_str = NULL, edge_id[200], node_source[200], node_target[200]; read = getline (&edge_str, &size, file); + if (read == -1) + THROWF(system_error, 0, "getline failed to read all edges (errno = %d)", errno); sscanf (edge_str, "%s %s %s", edge_id, node_source, node_target); free (edge_str); xbt_str_subst (edge_id, '\n', '\0', 0); @@ -776,8 +783,7 @@ xbt_graph_t xbt_graph_load (const char *filename) xbt_node_t source = xbt_dict_get (nodes_dict, node_source); xbt_node_t target = xbt_dict_get (nodes_dict, node_target); - xbt_edge_t e; - e = xbt_graph_new_edge (ret, source, target, xbt_strdup(edge_id)); + xbt_graph_new_edge (ret, source, target, xbt_strdup(edge_id)); } xbt_dict_free (&nodes_dict); return ret;