small improvements in str -> num convertors

This commit is contained in:
Denis Vlasenko
2006-11-25 14:49:04 +00:00
parent f2408e6c3f
commit 43bddf31e9
3 changed files with 25 additions and 9 deletions

View File

@@ -52,6 +52,15 @@
#endif
#if UINT_MAX != ULONG_MAX
extern inline unsigned bb_strtoui(const char *str, char **end, int b)
{
unsigned long v = strtoul(str, end, b);
if (v > UINT_MAX) {
errno = ERANGE;
return UINT_MAX;
}
return v;
}
#define type int
#define xstrtou(rest) xstrtou##rest
#define xstrto(rest) xstrtoi##rest
@@ -60,7 +69,8 @@
#define XSTR_UTYPE_MAX UINT_MAX
#define XSTR_TYPE_MAX INT_MAX
#define XSTR_TYPE_MIN INT_MIN
#define XSTR_STRTOU strtoul
/* libc has no strtoui, so we need to create/use our own */
#define XSTR_STRTOU bb_strtoui
#include "xatonum_template.c"
#undef type
#undef xstrtou
@@ -77,7 +87,7 @@
int xatoi_u(const char *numstr)
{
return xatoul_range(numstr, 0, INT_MAX);
return xatou_range(numstr, 0, INT_MAX);
}
uint32_t xatou32(const char *numstr)
@@ -87,5 +97,5 @@ uint32_t xatou32(const char *numstr)
uint16_t xatou16(const char *numstr)
{
return xatoul_range(numstr, 0, 0xffff);
return xatou_range(numstr, 0, 0xffff);
}