changeset 16882:551fb0402288

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>.
author Paul Eggert <eggert@cs.ucla.edu>
date Sat, 26 May 2012 23:48:00 -0700
parents 122207a2ef3a
children 48087c3e70ae
files ChangeLog lib/regcomp.c
diffstat 2 files changed, 19 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- 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
--- a/lib/regcomp.c
+++ b/lib/regcomp.c
@@ -956,18 +956,22 @@
   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