Plug a free basic memory leaks
[fio.git] / init.c
diff --git a/init.c b/init.c
index cc35e2b98681cd6932d95856ac0ef7a8b98bed52..fa1df8e7e760eac9c7a37f7d8afaa3ff9614c6cd 100644 (file)
--- a/init.c
+++ b/init.c
@@ -100,7 +100,7 @@ static struct option l_opts[FIO_NR_OPTIONS] = {
        },
        {
                .name           = (char *) "minimal",
-               .has_arg        = optional_argument,
+               .has_arg        = no_argument,
                .val            = 'm' | FIO_CLIENT_FLAG,
        },
        {
@@ -207,6 +207,11 @@ static struct option l_opts[FIO_NR_OPTIONS] = {
                .has_arg        = no_argument,
                .val            = 'T',
        },
+       {
+               .name           = (char *) "crctest",
+               .has_arg        = optional_argument,
+               .val            = 'G',
+       },
        {
                .name           = (char *) "idle-prof",
                .has_arg        = required_argument,
@@ -245,6 +250,7 @@ void free_shm(void)
                free_threads_shm();
        }
 
+       options_free(fio_options, &def_thread);
        scleanup();
 }
 
@@ -1405,6 +1411,7 @@ static void usage(const char *name)
        printf("  --version\t\tPrint version info and exit\n");
        printf("  --help\t\tPrint this page\n");
        printf("  --cpuclock-test\tPerform test/validation of CPU clock\n");
+       printf("  --crctest\t\tTest speed of checksum functions\n");
        printf("  --cmdhelp=cmd\t\tPrint command help, \"all\" for all of"
                " them\n");
        printf("  --enghelp=engine\tPrint ioengine help, or list"
@@ -1604,6 +1611,8 @@ void parse_cmd_client(void *client, char *opt)
        fio_client_add_cmd_option(client, opt);
 }
 
+extern int fio_crctest(const char *);
+
 int parse_cmd_line(int argc, char *argv[], int client_type)
 {
        struct thread_data *td = NULL;
@@ -1652,6 +1661,12 @@ int parse_cmd_line(int argc, char *argv[], int client_type)
                        output_format = FIO_OUTPUT_TERSE;
                        break;
                case 'F':
+                       if (!optarg) {
+                               log_err("fio: missing --output-format argument\n");
+                               exit_val = 1;
+                               do_exit++;
+                               break;
+                       }
                        if (!strcmp(optarg, "minimal") ||
                            !strcmp(optarg, "terse") ||
                            !strcmp(optarg, "csv"))
@@ -1862,6 +1877,10 @@ int parse_cmd_line(int argc, char *argv[], int client_type)
                        do_exit++;
                        exit_val = fio_monotonic_clocktest();
                        break;
+               case 'G':
+                       do_exit++;
+                       exit_val = fio_crctest(optarg);
+                       break;
                case 'L': {
                        long long val;