- char *p;
-
- for (p = v; *p != '\0'; p++)
- if (!isdigit(*p))
- err("illegal operand \"%s\" -- expected integer.", v);
- return (1);
+ long val;
+ char *ep;
+
+ for (; *v && isspace(*v); ++v);
+ if (isdigit(*v)) {
+ errno = 0;
+ val = strtol(v, &ep, 10);
+ if (*ep != '\0')
+ errx(2, "%s: trailing non-numeric characters", v);
+ if (errno == ERANGE) {
+ if (val == LONG_MIN)
+ errx(2, "%s: underflow", v);
+ if (val == LONG_MAX)
+ errx(2, "%s: overflow", v);
+ }
+ *lp = val;
+ return;
+ }
+ errx(2, "%s: expected integer", v);