save
[protos/libecoli.git] / lib / main.c
index deffea3..25cc4ca 100644 (file)
@@ -65,13 +65,13 @@ static const struct option ec_long_options[] = {
 
 static void usage(const char *prgname)
 {
-       printf("%s [options]\n"
+       printf("%s [options] [test1 test2 test3...]\n"
                "  -h\n"
                "  --"EC_OPT_HELP"\n"
                "      Show this help.\n"
                "  -l <level>\n"
                "  --"EC_OPT_LOG_LEVEL"=<level>\n"
-               "      Set log level (0 = no log, 6 = verbose).\n"
+               "      Set log level (0 = no log, 7 = verbose).\n"
                "  -r <probability>\n"
                "  --"EC_OPT_RANDOM_ALLOC_FAIL"=<probability>\n"
                "      Cause malloc to fail randomly. This helps to debug\n"
@@ -101,9 +101,9 @@ parse_int(const char *s, int min, int max, int *ret, unsigned int base)
        return 0;
 }
 
-static void parse_args(int argc, char **argv)
+static int parse_args(int argc, char **argv)
 {
-       int opt;
+       int ret, opt;
 
        while ((opt = getopt_long(argc, argv, ec_short_options,
                                ec_long_options, NULL)) != EOF) {
@@ -141,9 +141,14 @@ static void parse_args(int argc, char **argv)
 
                default:
                        usage(argv[0]);
-                       exit(1);
+                       return -1;
                }
        }
+
+       ret = optind - 1;
+       optind = 1;
+
+       return ret;
 }
 
 TAILQ_HEAD(debug_alloc_hdr_list, debug_alloc_hdr);
@@ -354,9 +359,15 @@ static int debug_log(unsigned int level, void *opaque, const char *str)
 
 int main(int argc, char **argv)
 {
-       int ret, leaks;
+       int i, ret = 0, leaks;
+
+       ret = parse_args(argc, argv);
+       if (ret < 0)
+               return 1;
+
+       argc -= ret;
+       argv += ret;
 
-       parse_args(argc, argv);
        srandom(seed);
 
        ec_log_register(debug_log, NULL);
@@ -368,7 +379,13 @@ int main(int argc, char **argv)
                return -1;
        }
 
-       ret = ec_test_all();
+       ret = 0;
+       if (argc <= 1) {
+               ret = ec_test_all();
+       } else {
+               for (i = 1; i < argc; i++)
+                       ret |= ec_test_one(argv[i]);
+       }
 
        ec_malloc_unregister();
        leaks = debug_alloc_dump_leaks();