OSDN Git Service

Faster test for overflow in str2txid, from Marko.
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 8 Oct 2007 22:07:16 +0000 (22:07 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 8 Oct 2007 22:07:16 +0000 (22:07 +0000)
contrib/txid/txid.c

index 606fb40..015e1fb 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;