|
@ -1,4 +1,4 @@ |
|
|
/* $OpenBSD: strtonum.c,v 1.6 2004/08/03 19:38:01 millert Exp $ */ |
|
|
|
|
|
|
|
|
/* $OpenBSD: strtonum.c,v 1.7 2013/04/17 18:40:58 tedu Exp $ */ |
|
|
|
|
|
|
|
|
/* |
|
|
/* |
|
|
* Copyright (c) 2004 Ted Unangst and Todd Miller |
|
|
* Copyright (c) 2004 Ted Unangst and Todd Miller |
|
@ -21,17 +21,17 @@ |
|
|
#include <limits.h> |
|
|
#include <limits.h> |
|
|
#include <stdlib.h> |
|
|
#include <stdlib.h> |
|
|
|
|
|
|
|
|
#define INVALID 1 |
|
|
|
|
|
#define TOOSMALL 2 |
|
|
|
|
|
#define TOOLARGE 3 |
|
|
|
|
|
|
|
|
#define INVALID 1 |
|
|
|
|
|
#define TOOSMALL 2 |
|
|
|
|
|
#define TOOLARGE 3 |
|
|
|
|
|
|
|
|
long long |
|
|
long long |
|
|
strtonum(const char *numstr, long long minval, long long maxval, |
|
|
strtonum(const char *numstr, long long minval, long long maxval, |
|
|
const char **errstrp) |
|
|
const char **errstrp) |
|
|
{ |
|
|
{ |
|
|
long long ll = 0; |
|
|
long long ll = 0; |
|
|
char *ep; |
|
|
|
|
|
int error = 0; |
|
|
int error = 0; |
|
|
|
|
|
char *ep; |
|
|
struct errval { |
|
|
struct errval { |
|
|
const char *errstr; |
|
|
const char *errstr; |
|
|
int err; |
|
|
int err; |
|
@ -44,9 +44,9 @@ strtonum(const char *numstr, long long minval, long long maxval, |
|
|
|
|
|
|
|
|
ev[0].err = errno; |
|
|
ev[0].err = errno; |
|
|
errno = 0; |
|
|
errno = 0; |
|
|
if (minval > maxval) |
|
|
|
|
|
|
|
|
if (minval > maxval) { |
|
|
error = INVALID; |
|
|
error = INVALID; |
|
|
else { |
|
|
|
|
|
|
|
|
} else { |
|
|
ll = strtoll(numstr, &ep, 10); |
|
|
ll = strtoll(numstr, &ep, 10); |
|
|
if (numstr == ep || *ep != '\0') |
|
|
if (numstr == ep || *ep != '\0') |
|
|
error = INVALID; |
|
|
error = INVALID; |
|
|