Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Deprecate MSG_clean
[simgrid.git] / tools / tesh / tesh.c
index e441b89..ae83f64 100644 (file)
@@ -21,8 +21,14 @@ XBT_LOG_NEW_DEFAULT_CATEGORY(tesh, "TEst SHell utility");
 /*** Options ***/
 int timeout_value = 5;          /* child timeout value */
 int sort_len = 19;              /* length of the prefix to sort */
+char *option;
+int coverage = 0;        /* whether the code coverage is enable */
 
+rctx_t rctx;
 const char *testsuite_name;
+
+xbt_dict_t env;
+
 static void handle_line(const char *filepos, char *line)
 {
   /* Search end */
@@ -166,8 +172,7 @@ static void handle_suite(const char *filename, FILE * IN)
   rctx_free(rctx);
 
   /* Clear buffers */
-  if (line)
-    free(line);
+  free(line);
   xbt_strbuff_free(buff);
 
 }
@@ -178,12 +183,12 @@ static void parse_environ()
   int i;
   char *eq = NULL;
   char *key = NULL;
-  env = xbt_dict_new();
+  env = xbt_dict_new_homogeneous(xbt_free_f);
   for (i = 0; environ[i]; i++) {
     p = environ[i];
     eq = strchr(p, '=');
     key = bprintf("%.*s", (int) (eq - p), p);
-    xbt_dict_set(env, key, xbt_strdup(eq + 1), xbt_free_f);
+    xbt_dict_set(env, key, xbt_strdup(eq + 1), NULL);
     free(key);
   }
 }
@@ -194,6 +199,8 @@ int main(int argc, char *argv[])
   int i;
   char *suitename = NULL;
   struct sigaction newact;
+
+  XBT_LOG_CONNECT(tesh);
   xbt_init(&argc, argv);
   rctx_init();
   parse_environ();
@@ -227,9 +234,9 @@ int main(int argc, char *argv[])
         exit(1);
       }
       char *eq = strchr(argv[i+1], '=');
-      xbt_assert1(eq,"The argument of --setenv must contain a '=' (got %s instead)",argv[i+1]);
+      xbt_assert(eq,"The argument of --setenv must contain a '=' (got %s instead)",argv[i+1]);
       char *key = bprintf("%.*s", (int) (eq - argv[i+1]), argv[i+1]);
-      xbt_dict_set(env, key, xbt_strdup(eq + 1), xbt_free_f);
+      xbt_dict_set(env, key, xbt_strdup(eq + 1), NULL);
       XBT_INFO("setting environment variable '%s' to '%s'", key, eq+1);
       free(key);
       memmove(argv + i, argv + i + 2, (argc - i - 1) * sizeof(char *));
@@ -240,16 +247,25 @@ int main(int argc, char *argv[])
             XBT_ERROR("--cfg argument requires an argument");
             exit(1);
       }
-      if(!option){ //if option is NULL
-       option = bprintf("--cfg=%s",argv[i+1]);
-      }else{
-       option = bprintf("%s --cfg=%s",option,argv[i+1]);
+      if (!option){ //if option is NULL
+      option = bprintf("--cfg=%s",argv[i+1]);
+      } else {
+        char *newoption = bprintf("%s --cfg=%s", option, argv[i+1]);
+        free(option);
+        option = newoption;
       }
       XBT_INFO("Add option \'--cfg=%s\' to command line",argv[i+1]);
       memmove(argv + i, argv + i + 2, (argc - i - 1) * sizeof(char *));
       argc -= 2;
       i -= 2;
     }
+    else if (!strcmp(argv[i], "--enable-coverage" )){
+      coverage = 1;
+      XBT_INFO("Enable coverage");
+      memmove(argv + i, argv + i + 1, (argc - i - 1) * sizeof(char *));
+      argc -= 1;
+      i -= 1;
+    }
   }
 
   /* Find the description file */
@@ -288,6 +304,6 @@ int main(int argc, char *argv[])
 
   rctx_exit();
   xbt_dict_free(&env);
-  xbt_free_f(option);
+  free(option);
   return 0;
 }