Simplify coding style of is_valid_ascii()
authorJohn Naylor <john.naylor@postgresql.org>
Fri, 5 Aug 2022 06:07:31 +0000 (13:07 +0700)
committerJohn Naylor <john.naylor@postgresql.org>
Fri, 5 Aug 2022 09:50:22 +0000 (16:50 +0700)
Calculate end of input rather than maintaining length,
per prior suggestion from Heikki Linnakangas. In passing,
use more natural language in a comment.

Discussion: https://www.postgresql.org/message-id/b4648cc2-5e9c-c93a-52cc-51e5c658a4f6%40iki.fi

src/include/mb/pg_wchar.h

index 31f5b393da417d6226a33cb43ed743d682ee0997..011b0b3abdc7211f264abbbbcbd780f933e95842 100644 (file)
@@ -709,13 +709,14 @@ extern WCHAR *pgwin32_message_to_UTF16(const char *str, int len, int *utf16len);
 static inline bool
 is_valid_ascii(const unsigned char *s, int len)
 {
+   const unsigned char *const s_end = s + len;
    uint64      chunk,
                highbit_cum = UINT64CONST(0),
                zero_cum = UINT64CONST(0x8080808080808080);
 
    Assert(len % sizeof(chunk) == 0);
 
-   while (len > 0)
+   while (s < s_end)
    {
        memcpy(&chunk, s, sizeof(chunk));
 
@@ -734,11 +735,10 @@ is_valid_ascii(const unsigned char *s, int len)
         */
        zero_cum &= (chunk + UINT64CONST(0x7f7f7f7f7f7f7f7f));
 
-       /* Capture any set bits in this chunk. */
+       /* Capture all set bits in this chunk. */
        highbit_cum |= chunk;
 
        s += sizeof(chunk);
-       len -= sizeof(chunk);
    }
 
    /* Check if any high bits in the high bit accumulator got set. */