+/*
+ * Option match, levenshtein distance. Handy for not quite remembering what
+ * the option name is.
+ */
+static int string_distance(const char *s1, const char *s2)
+{
+ unsigned int s1_len = strlen(s1);
+ unsigned int s2_len = strlen(s2);
+ unsigned int *p, *q, *r;
+ unsigned int i, j;
+
+ p = malloc(sizeof(unsigned int) * (s2_len + 1));
+ q = malloc(sizeof(unsigned int) * (s2_len + 1));
+
+ p[0] = 0;
+ for (i = 1; i <= s2_len; i++)
+ p[i] = p[i - 1] + 1;
+
+ for (i = 1; i <= s1_len; i++) {
+ q[0] = p[0] + 1;
+ for (j = 1; j <= s2_len; j++) {
+ unsigned int sub = p[j - 1];
+
+ if (s1[i - 1] != s2[j - 1])
+ sub++;
+
+ q[j] = min(p[j] + 1, min(q[j - 1] + 1, sub));
+ }
+ r = p;
+ p = q;
+ q = r;
+ }
+
+ i = p[s2_len];
+ free(p);
+ free(q);
+ return i;
+}
+
+static void show_option_help(struct fio_option *o)