Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
model-checker : switch between data program and data libsimgrid for comparison of...
[simgrid.git] / src / mc / mc_liveness.c
index b93a56c..8255bea 100644 (file)
@@ -45,52 +45,43 @@ const char* get_memory_map_addr(void *addr){
   if(fp == NULL)
     perror("fopen failed");
 
-  if(addr == NULL)
+  if(addr == NULL){
+    fclose(fp);
     return "nil";
+  }
 
-  char *lfields[6], *start, *end, *endptr, *map;
-  int i;
+  xbt_dynar_t lfields = NULL;
+  xbt_dynar_t start_end  = NULL;
   void *start_addr;
   void *end_addr;
 
   while ((read = getline(&line, &n, fp)) != -1) {
 
-    line[read - 1] = '\0';
+    xbt_str_trim(line, NULL);
+    xbt_str_strip_spaces(line);
+    lfields = xbt_str_split(line,NULL);
 
-    lfields[0] = strtok(line, " ");
-
-    for (i = 1; i < 5 && lfields[i - 1] != NULL; i++) {
-      lfields[i] = strtok(NULL, " ");
-    }
+    start_end = xbt_str_split(xbt_dynar_get_as(lfields, 0, char*), "-");
+    start_addr = (void *) strtoul(xbt_dynar_get_as(start_end, 0, char*), NULL, 16);
+    end_addr = (void *) strtoul(xbt_dynar_get_as(start_end, 1, char*), NULL, 16);
 
-    map = strtok(NULL, " ");
-    if(map != NULL)
-      lfields[5] = strdup(map);
-    else
-      lfields[5] = strdup("Anonymous");
-    
-    start = strtok(lfields[0], "-");
-    start_addr = (void *) strtoul(start, &endptr, 16); 
-   
-    if(start_addr == std_heap)
-      lfields[5] = strdup("std_heap");
-    if(start_addr == raw_heap)
-      lfields[5] = strdup("raw_heap");
-    end = strtok(NULL, "-");
-    end_addr = (void *) strtoul(end, &endptr, 16); 
-   
     if((addr > start_addr) && ( addr < end_addr)){
       free(line);
       fclose(fp);
-      if(lfields[5] != NULL){
-       return lfields[5];
-      }else{
+      if(start_addr == std_heap)
+       return "std_heap";
+      if(start_addr == raw_heap)
+       return "raw_heap";
+      if(xbt_dynar_length(lfields) == 6)
+       return xbt_dynar_get_as(lfields, xbt_dynar_length(lfields) - 1, char*);
+      else
        return "Anonymous";
-      }
     }
-    
+
   }
 
+  free(line);
+  fclose(fp);
   return "Unknown area";
 
 }
@@ -199,7 +190,7 @@ int snapshot_compare(mc_snapshot_t s1, mc_snapshot_t s2, void* s_heap, void* r_h
          return 1;
        }
       }
-      if(data_program_region_compare(s1->regions[i]->data, s2->regions[i]->data, s1->regions[i]->size) != 0){
+      if(data_libsimgrid_region_compare(s1->regions[i]->data, s2->regions[i]->data, s1->regions[i]->size) != 0){
        if(XBT_LOG_ISENABLED(mc_liveness, xbt_log_priority_debug)){
          XBT_DEBUG("Different memcmp for data in libsimgrid");
          errors++;
@@ -225,9 +216,9 @@ int snapshot_compare(mc_snapshot_t s1, mc_snapshot_t s2, void* s_heap, void* r_h
          return 1;
        }
       }
-      if(data_libsimgrid_region_compare(s1->regions[i]->data, s2->regions[i]->data, s1->regions[i]->size) != 0){
+      if(data_program_region_compare(s1->regions[i]->data, s2->regions[i]->data, s1->regions[i]->size) != 0){
        if(XBT_LOG_ISENABLED(mc_liveness, xbt_log_priority_debug)){
-         XBT_DEBUG("Different memcmp for data in libsimgrid");
+         XBT_DEBUG("Different memcmp for data in program");
          errors++;
        }else{
          return 1;