init: escape description option string
authorJens Axboe <axboe@kernel.dk>
Wed, 27 Nov 2013 03:39:35 +0000 (20:39 -0700)
committerJens Axboe <axboe@kernel.dk>
Wed, 27 Nov 2013 03:39:35 +0000 (20:39 -0700)
Signed-off-by: Jens Axboe <axboe@kernel.dk>
fio.h
init.c
options.c
parse.c
parse.h

diff --git a/fio.h b/fio.h
index a6dcb4ea84a0b36568ad2dec471f570607437f37..d0fe83a5ca6e8a62e2eb74b082e35063cdbd1039 100644 (file)
--- a/fio.h
+++ b/fio.h
@@ -406,7 +406,7 @@ extern int parse_cmd_line(int, char **, int);
 extern int fio_backend(void);
 extern void reset_fio_state(void);
 extern void clear_io_state(struct thread_data *);
-extern int fio_options_parse(struct thread_data *, char **, int);
+extern int fio_options_parse(struct thread_data *, char **, int, int);
 extern void fio_keywords_init(void);
 extern int fio_cmd_option_parse(struct thread_data *, const char *, char *);
 extern int fio_cmd_ioengine_option_parse(struct thread_data *, const char *, char *);
diff --git a/init.c b/init.c
index 1841ffc0fd152a81f72989a669aae08fe7dcc26e..4dd0c9ae13a38e3d66af6f1b782b03f464daeddd 100644 (file)
--- a/init.c
+++ b/init.c
@@ -1146,9 +1146,9 @@ void add_job_opts(const char **o, int client_type)
                        td = get_new_job(0, td_parent, 0);
                }
                if (in_global)
-                       fio_options_parse(td_parent, (char **) &o[i], 1);
+                       fio_options_parse(td_parent, (char **) &o[i], 1, 0);
                else
-                       fio_options_parse(td, (char **) &o[i], 1);
+                       fio_options_parse(td, (char **) &o[i], 1, 0);
                i++;
        }
 
@@ -1329,14 +1329,10 @@ int parse_jobs_ini(char *file, int is_buf, int stonewall_flag, int type)
                        num_opts++;
                }
 
-               ret = fio_options_parse(td, opts, num_opts);
-               if (!ret) {
-                       if (dump_cmdline)
-                               for (i = 0; i < num_opts; i++)
-                                       log_info("--%s ", opts[i]);
-
+               ret = fio_options_parse(td, opts, num_opts, dump_cmdline);
+               if (!ret)
                        ret = add_job(td, name, 0, 0, type);
-               else {
+               else {
                        log_err("fio: job %s dropped\n", name);
                        put_job(td);
                }
index a700e4da71370838818e755840049f15e08a60f3..d2493e4566d963c60598ba3865bd0d40dd68534b 100644 (file)
--- a/options.c
+++ b/options.c
@@ -3550,7 +3550,8 @@ static char **dup_and_sub_options(char **opts, int num_opts)
        return opts_copy;
 }
 
-int fio_options_parse(struct thread_data *td, char **opts, int num_opts)
+int fio_options_parse(struct thread_data *td, char **opts, int num_opts,
+                       int dump_cmdline)
 {
        int i, ret, unknown;
        char **opts_copy;
@@ -3561,7 +3562,7 @@ int fio_options_parse(struct thread_data *td, char **opts, int num_opts)
        for (ret = 0, i = 0, unknown = 0; i < num_opts; i++) {
                struct fio_option *o;
                int newret = parse_option(opts_copy[i], opts[i], fio_options,
-                                               &o, td);
+                                               &o, td, dump_cmdline);
 
                if (opts_copy[i]) {
                        if (newret && !o) {
@@ -3590,7 +3591,7 @@ int fio_options_parse(struct thread_data *td, char **opts, int num_opts)
                        if (td->eo)
                                newret = parse_option(opts_copy[i], opts[i],
                                                      td->io_ops->options, &o,
-                                                     td->eo);
+                                                     td->eo, dump_cmdline);
 
                        ret |= newret;
                        if (!o)
diff --git a/parse.c b/parse.c
index 5e3573ea646fcb52ca1b08d043712d2c89efb0c6..e3f431edcc5a3bccdcb0a70173c181fcea1323a4 100644 (file)
--- a/parse.c
+++ b/parse.c
@@ -944,7 +944,8 @@ int parse_cmd_option(const char *opt, const char *val,
 }
 
 int parse_option(char *opt, const char *input,
-                struct fio_option *options, struct fio_option **o, void *data)
+                struct fio_option *options, struct fio_option **o, void *data,
+                int dump_cmdline)
 {
        char *post;
 
@@ -965,11 +966,25 @@ int parse_option(char *opt, const char *input,
                return 1;
        }
 
-       if (!handle_option(*o, post, data))
-               return 0;
+       if (handle_option(*o, post, data)) {
+               log_err("fio: failed parsing %s\n", input);
+               return 1;
+       }
 
-       log_err("fio: failed parsing %s\n", input);
-       return 1;
+       if (dump_cmdline) {
+               const char *delim;
+
+               if (!strcmp("description", (*o)->name))
+                       delim = "\"";
+               else
+                       delim = "";
+
+               log_info("--%s%s", (*o)->name, post ? "" : " ");
+               if (post)
+                       log_info("=%s%s%s ", delim, post, delim);
+       }
+
+       return 0;
 }
 
 /*
diff --git a/parse.h b/parse.h
index cf15ce0855fbb6efff797f7ff6a6c0cb88af6056..34d99d46d3e47d9b6c356d10aa6afeccf0eaadbf 100644 (file)
--- a/parse.h
+++ b/parse.h
@@ -76,7 +76,7 @@ struct fio_option {
 
 typedef int (str_cb_fn)(void *, char *);
 
-extern int parse_option(char *, const char *, struct fio_option *, struct fio_option **, void *);
+extern int parse_option(char *, const char *, struct fio_option *, struct fio_option **, void *, int);
 extern void sort_options(char **, struct fio_option *, int);
 extern int parse_cmd_option(const char *t, const char *l, struct fio_option *, void *);
 extern int show_cmd_help(struct fio_option *, const char *);