commit 8222234e05c61264c0c9cf8247ee4dbb7e410a5b from: Omar Polo date: Mon May 16 21:21:26 2022 UTC use strtonum instead of messing around with strtol 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