[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