Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Use defined interface for accessing to lib properties.
[simgrid.git] / src / simdag / sd_dotloader.c
index 71be0c0..25795b6 100644 (file)
@@ -27,17 +27,23 @@ xbt_dynar_t SD_dotload_generic(const char * filename);
 
 static double dot_parse_double(const char *string)
 {
-  if (string == NULL)
-    return -1;
-  int ret = 0;
-  double value = -1;
-
-  ret = sscanf(string, "%lg", &value);
-  if (ret != 1)
-    XBT_WARN("%s is not a double", string);
-  return value;
+    if (string == NULL)
+          return -1;
+      double value = -1;
+        char *err;
+
+          //ret = sscanf(string, "%lg", &value);
+          errno = 0;
+            value = strtod(string,&err);
+              if(errno)
+                  {
+                        XBT_WARN("Failed to convert string to double: %s\n",strerror(errno));
+                            return -1;
+                              }
+                return value;
 }
 
+
 static int dot_parse_int(const char *string)
 {
   if (string == NULL)
@@ -312,7 +318,7 @@ void dot_add_task(Agnode_t * dag_node)
         computer = xbt_dynar_new(sizeof(SD_task_t), NULL);
         xbt_dict_set(computers, char_performer, computer, NULL);
       }
-      if(performer < host_lib->count){
+      if(performer < xbt_lib_length(host_lib)){
         // the  wanted computer is available
         SD_task_t *task_test = NULL;
         if(order < computer->used)
@@ -348,9 +354,10 @@ void dot_add_task(Agnode_t * dag_node)
 void dot_add_input_dependencies(SD_task_t current_job, Agedge_t * edge)
 {
   SD_task_t file;
-
-  char name[80];
-  sprintf(name, "%s->%s", agnameof(agtail(edge)), agnameof(aghead(edge)));
+  char *name_tail=agnameof(agtail(edge));
+  char *name_head=agnameof(aghead(edge));
+  char *name = malloc((strlen(name_head)+strlen(name_tail)+3)*sizeof(char));
+  sprintf(name, "%s->%s", name_tail, name_head);
   double size = dot_parse_double(agget(edge, (char *) "size"));
   XBT_DEBUG("size : %e, get size : %s", size, agget(edge, (char *) "size"));
 
@@ -375,6 +382,7 @@ void dot_add_input_dependencies(SD_task_t current_job, Agedge_t * edge)
       SD_task_dependency_add(NULL, NULL, file, current_job);
     }
   }
+  free(name);
 }
 
 /* dot_add_output_dependencies create the dependencies between a
@@ -384,8 +392,10 @@ void dot_add_input_dependencies(SD_task_t current_job, Agedge_t * edge)
 void dot_add_output_dependencies(SD_task_t current_job, Agedge_t * edge)
 {
   SD_task_t file;
-  char name[80];
-  sprintf(name, "%s->%s", agnameof(agtail(edge)), agnameof(aghead(edge)));
+  char *name_tail=agnameof(agtail(edge));
+  char *name_head=agnameof(aghead(edge));
+  char *name = malloc((strlen(name_head)+strlen(name_tail)+3)*sizeof(char));
+  sprintf(name, "%s->%s", name_tail, name_head);
   double size = dot_parse_double(agget(edge, (char *) "size"));
   XBT_DEBUG("size : %e, get size : %s", size, agget(edge, (char *) "size"));
 
@@ -413,4 +423,5 @@ void dot_add_output_dependencies(SD_task_t current_job, Agedge_t * edge)
       SD_task_dependency_add(NULL, NULL, current_job, file);
     }
   }
+  free(name);
 }