X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/d5a1db1d0b268cb9ed8f37246fd970fce7631943..fcaee754669ca60c27288a8e290c25c5accdedbb:/src/xbt/graph.c diff --git a/src/xbt/graph.c b/src/xbt/graph.c index e3ce876fd2..a56d008f66 100644 --- a/src/xbt/graph.c +++ b/src/xbt/graph.c @@ -6,6 +6,8 @@ /* 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 "simgrid_config.h" /* getline */ +#include #include #include "xbt/sysdep.h" #include "xbt/log.h" @@ -142,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) @@ -158,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; @@ -188,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) @@ -212,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) { @@ -576,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); } @@ -597,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, @@ -627,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(); @@ -731,6 +731,7 @@ void xbt_graph_export_graphxml(xbt_graph_t g, const char *filename, xbt_graph_t xbt_graph_load (const char *filename) { FILE *file = NULL; + ssize_t read; file = fopen (filename, "r"); xbt_assert(file, "Failed to open %s \n", filename); @@ -740,14 +741,18 @@ xbt_graph_t xbt_graph_load (const char *filename) //read the number of nodes size_t size; char *nnodes_str = NULL; - getline (&nnodes_str, &size, file); + 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); //read all nodes for (i = 0; i < nnodes; i++){ char *node_str = NULL; - getline (&node_str, &size, file); + 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); @@ -758,14 +763,18 @@ xbt_graph_t xbt_graph_load (const char *filename) //read the number of edges char *nedges_str = NULL; - getline (&nedges_str, &size, file); + 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); //read all edges for (i = 0; i < nedges; i++){ char *edge_str = NULL, edge_id[200], node_source[200], node_target[200]; - getline (&edge_str, &size, file); + 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); @@ -774,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;