diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2012-05-26 23:48:00 -0700 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2012-05-26 23:51:00 -0700 |
commit | 252b52457da7887667c036d18cc5169777615bb0 (patch) | |
tree | d459c8ff39ed4364c439c0d22aa1e1f7c992ef1e | |
parent | 4fb7ea20122033fbb9644b4e4b18bee5a86bedbb (diff) | |
download | gnulib-252b52457da7887667c036d18cc5169777615bb0.tar.gz |
regex: don't assume uint64_t or uint32_t
* lib/regcomp.c (init_word_char): Don't assume that the types
uint64_t and uint32_t exist. The C standard doesn't guarantee
them, and on some 32-bit compilers there is no uint64_t.
Problem reported by Gianluigi Tiesi in
<http://lists.gnu.org/archive/html/bug-gnulib/2012-03/msg00154.html>.
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | lib/regcomp.c | 16 |
2 files changed, 19 insertions, 6 deletions
@@ -1,3 +1,12 @@ +2012-05-26 Paul Eggert <eggert@cs.ucla.edu> + + regex: don't assume uint64_t or uint32_t + * lib/regcomp.c (init_word_char): Don't assume that the types + uint64_t and uint32_t exist. The C standard doesn't guarantee + them, and on some 32-bit compilers there is no uint64_t. + Problem reported by Gianluigi Tiesi in + <http://lists.gnu.org/archive/html/bug-gnulib/2012-03/msg00154.html>. + 2012-05-25 Jim Meyering <meyering@redhat.com> maint.mk: add strncpy-prohibiting syntax-check rule diff --git a/lib/regcomp.c b/lib/regcomp.c index b51a9a610b..7996dc0b00 100644 --- a/lib/regcomp.c +++ b/lib/regcomp.c @@ -956,18 +956,22 @@ init_word_char (re_dfa_t *dfa) int ch = 0; if (BE (dfa->map_notascii == 0, 1)) { + bitset_word_t bits0 = 0x00000000; + bitset_word_t bits1 = 0x03ff0000; + bitset_word_t bits2 = 0x87fffffe; + bitset_word_t bits3 = 0x07fffffe; if (BITSET_WORD_BITS == 64) { - dfa->word_char[0] = UINT64_C (0x03ff000000000000); - dfa->word_char[1] = UINT64_C (0x07fffffe87fffffe); + dfa->word_char[0] = bits1 << 31 << 1 | bits0; + dfa->word_char[1] = bits3 << 31 << 1 | bits2; i = 2; } else if (BITSET_WORD_BITS == 32) { - dfa->word_char[0] = UINT32_C (0x00000000); - dfa->word_char[1] = UINT32_C (0x03ff0000); - dfa->word_char[2] = UINT32_C (0x87fffffe); - dfa->word_char[3] = UINT32_C (0x07fffffe); + dfa->word_char[0] = bits0; + dfa->word_char[1] = bits1; + dfa->word_char[2] = bits2; + dfa->word_char[3] = bits3; i = 4; } else |