1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
#include "config.h"
#include "strparse.h"
#include <stdlib.h>
#include <errno.h>
static long strtol_with_range(const char *nptr, char **endptr, int base,
long min, long max) {
long l;
errno = 0;
l = strtol(nptr, endptr, base);
if(errno != 0)
return l;
if(l > max) {
errno = ERANGE;
return max;
}
if(l < min) {
errno = ERANGE;
return min;
}
return l;
}
unsigned short strtous(const char *nptr, char **endptr, int base) {
return (unsigned short) strtol_with_range(nptr, endptr, base,
0, USHRT_MAX);
}
#if UINT_MAX != ULONG_MAX
unsigned int strtoui(const char *nptr, char **endptr, int base) {
return (unsigned int) strtol_with_range(nptr, endptr, base,
0, UINT_MAX);
}
int strtoi(const char *nptr, char **endptr, int base) {
return (int) strtol_with_range(nptr, endptr, base,
INT_MIN, INT_MAX);
}
#endif
|