More eliminate silly warnings
[sxemacs] / src / search.c
index 52271ce..ff9f338 100644 (file)
@@ -46,9 +46,11 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. */
  (!NILP (table) ? TRT_TABLE_OF (table, (Emchar) pos) : pos)
 \f
 #include "elhash.h"
  (!NILP (table) ? TRT_TABLE_OF (table, (Emchar) pos) : pos)
 \f
 #include "elhash.h"
+/* Make sure these are ALWAYS powers of 2 */
 #define REGEXP_CACHE_SIZE 0x80
 #define REGEXP_CACHE_HASH_MASK (REGEXP_CACHE_SIZE-1)
 #define REGEXP_FASTMAP_SIZE 0400
 #define REGEXP_CACHE_SIZE 0x80
 #define REGEXP_CACHE_HASH_MASK (REGEXP_CACHE_SIZE-1)
 #define REGEXP_FASTMAP_SIZE 0400
+#define REGEXP_FASTMAP_MASK (REGEXP_FASTMAP_SIZE-1)
 
 #define __REGEXP_DEBUG__(args...)      fprintf(stderr, "REGEXP " args)
 #ifndef REGEXP_DEBUG_FLAG
 
 #define __REGEXP_DEBUG__(args...)      fprintf(stderr, "REGEXP " args)
 #ifndef REGEXP_DEBUG_FLAG
@@ -333,7 +335,7 @@ compile_pattern(Lisp_Object pattern,
 static void
 compre_prfun(Lisp_Object obj, Lisp_Object pcfun, int escflag)
 {
 static void
 compre_prfun(Lisp_Object obj, Lisp_Object pcfun, int escflag)
 {
-       write_fmt_str(pcfun, "#<compiled regexp %lx", 
+       write_fmt_str(pcfun, "#<compiled regexp %lx",
                      (long unsigned int)((COMPRE_GET(obj))->buffer));
        if (escflag);
 }
                      (long unsigned int)((COMPRE_GET(obj))->buffer));
        if (escflag);
 }
@@ -747,7 +749,7 @@ fast_string_match(Lisp_Object regexp, const Bufbyte * nonreloc,
        fixup_internal_substring(nonreloc, reloc, offset, &length);
 
 
        fixup_internal_substring(nonreloc, reloc, offset, &length);
 
 
-       
+
        if (!NILP(reloc)) {
                if (no_quit) {
                        newnonreloc = XSTRING_DATA(reloc);
        if (!NILP(reloc)) {
                if (no_quit) {
                        newnonreloc = XSTRING_DATA(reloc);
@@ -764,8 +766,11 @@ fast_string_match(Lisp_Object regexp, const Bufbyte * nonreloc,
                                   return with failure...
                                */
                                return -1;
                                   return with failure...
                                */
                                return -1;
-                       newnonreloc = alloca(length);
-                       memcpy((void*)newnonreloc, (void*)XSTRING_DATA(reloc), length);
+                       Bufbyte *copy = alloca(length);
+                       memcpy((void*)copy,
+                               (const void*)XSTRING_DATA(reloc),
+                               length);
+                       newnonreloc = copy;
                }
        }
 
                }
        }
 
@@ -1867,9 +1872,9 @@ boyer_moore(struct buffer *buf, Bufbyte * base_pat, Bytecount len,
                                this_translated = 0;
                        }
                        if (ch > REGEXP_FASTMAP_SIZE)
                                this_translated = 0;
                        }
                        if (ch > REGEXP_FASTMAP_SIZE)
-                               j = ((unsigned char)ch | 0200);
+                               j = ((unsigned char)(ch & REGEXP_FASTMAP_MASK)| 0200);
                        else
                        else
-                               j = (unsigned char)ch;
+                               j = (unsigned char)(ch & REGEXP_FASTMAP_MASK);
 
                        if (i == infinity)
                                stride_for_teases = BM_tab[j];
 
                        if (i == infinity)
                                stride_for_teases = BM_tab[j];
@@ -1882,9 +1887,9 @@ boyer_moore(struct buffer *buf, Bufbyte * base_pat, Bytecount len,
                                while (1) {
                                        ch = TRANSLATE(inverse_trt, ch);
                                        if (ch > REGEXP_FASTMAP_SIZE)
                                while (1) {
                                        ch = TRANSLATE(inverse_trt, ch);
                                        if (ch > REGEXP_FASTMAP_SIZE)
-                                               j = ((unsigned char)ch | 0200);
+                                               j = ((unsigned char)(ch & REGEXP_FASTMAP_MASK) | 0200);
                                        else
                                        else
-                                               j = (unsigned char)ch;
+                                               j = (unsigned char)(ch & REGEXP_FASTMAP_MASK);
 
                                        /* For all the characters that map into CH,
                                           set up simple_translate to map the last byte
 
                                        /* For all the characters that map into CH,
                                           set up simple_translate to map the last byte