str2txid(const char *s, const char **endp)
{
txid val = 0;
+ txid cutoff = MAX_TXID / 10;
+ txid cutlim = MAX_TXID % 10;
for (; *s; s++)
{
- txid last = val;
+ unsigned d;
if (*s < '0' || *s > '9')
break;
-
- val = val * 10 + (*s - '0');
+ d = *s - '0';
/*
* check for overflow
*/
- if (val > MAX_TXID || (val / 10) != last)
+ if (val > cutoff || (val == cutoff && d > cutlim))
{
val = 0;
break;
}
+
+ val = val * 10 + d;
}
if (endp)
*endp = s;