rendered paste body#include <err.h>#ifndef HAVE_STRTONUM#include <stdlib.h>#include <limits.h>#include <errno.h>#define INVALID 1#define TOOSMALL 2#define TOOLARGE 3long longstrtonum(const char *numstr, long long minval, long long maxval, const char **errstrp){ long long ll = 0; char *ep; int error = 0; struct errval { const char *errstr; int err; } ev[4] = { { NULL, 0 }, { "invalid", EINVAL }, { "too small", ERANGE }, { "too large", ERANGE }, }; ev[0].err = errno; errno = 0; if (minval > maxval) error = INVALID; else { ll = strtoll(numstr, &ep, 10); if (numstr == ep || *ep != '\0') error = INVALID; else if ((ll == LLONG_MIN && errno == ERANGE) || ll < minval) error = TOOSMALL; else if ((ll == LLONG_MAX && errno == ERANGE) || ll > maxval) error = TOOLARGE; } if (errstrp != NULL) *errstrp = ev[error].errstr; errno = ev[error].err; if (error) ll = 0; return (ll);}#endif /* HAVE_STRTONUM */intmain(void) { char *substring="100"; const char *errstr; strtonum(substring, 50, 200, errstr); (errstr) warnx("number of buttons is %s: %s", errstr, substring); return 0;}