summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2012-05-26 23:48:00 -0700
committerPaul Eggert <eggert@cs.ucla.edu>2012-05-26 23:51:00 -0700
commit252b52457da7887667c036d18cc5169777615bb0 (patch)
treed459c8ff39ed4364c439c0d22aa1e1f7c992ef1e
parent4fb7ea20122033fbb9644b4e4b18bee5a86bedbb (diff)
downloadgnulib-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--ChangeLog9
-rw-r--r--lib/regcomp.c16
2 files changed, 19 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index 125210066a..1676ab99b7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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