Faster test for overflow in str2txid, from Marko.

This commit is contained in:
Tom Lane 2007-10-08 22:07:16 +00:00
parent b196b7fb72
commit 9f3bd2994c
1 changed files with 7 additions and 4 deletions

View File

@ -234,24 +234,27 @@ static txid
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;