All pastes #1550328 Raw Edit

Valera

public c v1 · immutable
#1550328 ·published 2009-09-01 14:34 UTC
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);        warnx("number of buttons is %s: %s", errstr, substring);        return 0;}