Commit Diff


commit - 653179c82e2f0b78eba86a63701cd8b033a3396d
commit + 8222234e05c61264c0c9cf8247ee4dbb7e410a5b
blob - 671a958aad36cfed307976b73ba36520ebe4167c
blob + c35e85756b56d000c09bb0f23fe6ebdbd1b72aa1
--- mymenu.c
+++ mymenu.c
@@ -870,30 +870,21 @@ invc:
 }
 
 /*
- * Given a string try to parse it as a number or return `default_value'.
+ * Given a string try to parse it as a number or return `def'.
  */
 int
-parse_integer(const char *str, int default_value)
+parse_integer(const char *str, int def)
 {
-	long lval;
-	char *ep;
-
-	errno = 0;
-	lval = strtol(str, &ep, 10);
+	const char *errstr;
+	int i;
 
-	if (str[0] == '\0' || *ep != '\0') { /* NaN */
-		fprintf(stderr, "'%s' is not a valid number! Using %d as default.\n", str,
-			default_value);
-		return default_value;
-	}
-
-	if ((errno == ERANGE && (lval == LONG_MAX || lval == LONG_MIN))
-		|| (lval > INT_MAX || lval < INT_MIN)) {
-		fprintf(stderr, "%s out of range! Using %d as default.\n", str, default_value);
-		return default_value;
+	i = strtonum(str, INT_MIN, INT_MAX, &errstr);
+	if (errstr != NULL) {
+		warnx("'%s' is %s; using %d as default", str, errstr, def);
+		return def;
 	}
 
-	return lval;
+	return i;
 }
 
 /* Like parse_integer but recognize the percentages (i.e. strings ending with