Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Replace sprintf by snprintf.
[simgrid.git] / src / simdag / sd_dotloader.cpp
index 25fdbae..759b2b5 100644 (file)
@@ -4,23 +4,16 @@
 /* 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 "src/internal_config.h"
 #include "src/simdag/simdag_private.h"
 #include "simgrid/simdag.h"
-#include "xbt/log.h"
-#include <stdbool.h>
+#include "xbt/file.h"
 #include <string.h>
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(sd_dotparse, sd, "Parsing DOT files");
 
-#undef CLEANUP
-
-#ifdef HAVE_CGRAPH_H
+#if HAVE_GRAPHVIZ
 #include <graphviz/cgraph.h>
-#elif HAVE_AGRAPH_H
-#include <graphviz/agraph.h>
-#define agnxtnode(dot, node)    agnxtnode(node)
-#define agfstout(dot, node)     agfstout(node)
-#define agnxtout(dot, edge)     agnxtout(edge)
 #endif
 
 typedef enum {
@@ -30,7 +23,6 @@ typedef enum {
 
 xbt_dynar_t SD_dotload_generic(const char * filename, seq_par_t seq_or_par, bool schedule);
 
-
 static void dot_task_p_free(void *task) {
   SD_task_destroy(*(SD_task_t *)task);
 }
@@ -175,8 +167,9 @@ xbt_dynar_t SD_dotload_generic(const char * filename, seq_par_t seq_or_par, bool
       dst = (SD_task_t)xbt_dict_get_or_null(jobs, dst_name);
 
       if (size > 0) {
-        char *name = (char*)xbt_malloc((strlen(src_name)+strlen(dst_name)+6)*sizeof(char));
-        sprintf(name, "%s->%s", src_name, dst_name);
+        int namesize=(strlen(src_name)+strlen(dst_name)+6);
+        char *name = (char*)xbt_malloc(namesize*sizeof(char*));
+        snprintf(name,namesize, "%s->%s", src_name, dst_name);
         XBT_DEBUG("See <transfer id=%s amount = %.0f>", name, size);
         if (!(task = (SD_task_t)xbt_dict_get_or_null(jobs, name))) {
           if (seq_or_par == sequential)
@@ -248,7 +241,9 @@ xbt_dynar_t SD_dotload_generic(const char * filename, seq_par_t seq_or_par, bool
   }
 
   if (result && !acyclic_graph_detail(result)) {
-    XBT_ERROR("The DOT described in %s is not a DAG. It contains a cycle.", basename((char*)filename));
+    char* base = xbt_basename(filename);
+    XBT_ERROR("The DOT described in %s is not a DAG. It contains a cycle.", base);
+    free(base);
     xbt_dynar_free(&result);
     result = NULL;
   }