Faster test for overflow in str2txid, from Marko.
authorTom Lane
Mon, 8 Oct 2007 22:07:16 +0000 (22:07 +0000)
committerTom Lane
Mon, 8 Oct 2007 22:07:16 +0000 (22:07 +0000)
contrib/txid/txid.c

index 606fb40040bf4a522d799302bb6dcf8ef7d0268d..015e1fb93687cd2072b8bef0066e3be2a4f4d313 100644 (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;