[PATCH] Abstract option handling
Instead of parsing manually, we abstract out everything so parse.[ch] is
now a generic config file parser. This is the next step towards unifying
command and job options.
I'm sure I broke plenty of options in the process...
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
diff --git a/parse.h b/parse.h
new file mode 100644
index 0000000..c36bdc0
--- /dev/null
+++ b/parse.h
@@ -0,0 +1,46 @@
+#ifndef FIO_PARSE_H
+#define FIO_PARSE_H
+
+/*
+ * Option types
+ */
+enum fio_opt_type {
+ FIO_OPT_STR = 0,
+ FIO_OPT_STR_VAL,
+ FIO_OPT_STR_VAL_TIME,
+ FIO_OPT_STR_STORE,
+ FIO_OPT_RANGE,
+ FIO_OPT_INT,
+ FIO_OPT_STR_SET,
+};
+
+/*
+ * Option define
+ */
+struct fio_option {
+ char *name;
+ enum fio_opt_type type;
+ unsigned int off1;
+ unsigned int off2;
+ unsigned int max_val;
+ void *cb;
+};
+
+typedef int (str_cb_fn)(void *, char *);
+
+extern int parse_option(const char *, struct fio_option *, void *);
+
+extern void strip_blank_front(char **);
+extern void strip_blank_end(char *);
+
+/*
+ * Handlers for the options
+ */
+typedef int (fio_opt_str_fn)(void *, char *);
+typedef int (fio_opt_str_val_fn)(void *, unsigned long long *);
+typedef int (fio_opt_int_fn)(void *, unsigned int *);
+typedef int (fio_opt_str_set_fn)(void *);
+
+#define td_var(start, offset) ((void *) start + (offset))
+
+#endif