Remove duplicate code in parser

Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
diff --git a/parse.c b/parse.c
index efb5e3d..425411e 100644
--- a/parse.c
+++ b/parse.c
@@ -196,10 +196,10 @@
 		return __get_mult_bytes(str, data, percent);
 
         /*
-         * Go forward until we hit a non-digit
+         * Go forward until we hit a non-digit, or +/- sign
          */
 	while ((p - str) <= len) {
-		if (!isdigit((int) *p))
+		if (!isdigit((int) *p) && (*p != '+') && (*p != '-'))
 			break;
 		p++;
 	}
@@ -491,18 +491,8 @@
 	case FIO_OPT_STR_STORE: {
 		fio_opt_str_fn *fn = o->cb;
 
-		if (!posval_sort(o, posval)) {
-			if (o->roff1)
-				cp = (char **) o->roff1;
-			else
-				cp = td_var(data, o->off1);
-			*cp = strdup(ptr);
-
-			if (fn)
-				ret = fn(data, ptr);
-
-			return ret;
-		}
+		if (!posval_sort(o, posval))
+			goto match;
 
 		ret = 1;
 		for (i = 0; i < PARSE_MAX_VP; i++) {
@@ -516,6 +506,7 @@
 				ret = 0;
 				if (vp->cb)
 					fn = vp->cb;
+match:
 				if (o->roff1)
 					cp = (char **) o->roff1;
 				else