]> Savannah Git Hosting - gnulib.git/commitdiff
GNU text utilities TEXTUTILS-1_9_1f
authorJim Meyering <jim@meyering.net>
Fri, 6 May 1994 18:29:16 +0000 (18:29 +0000)
committerJim Meyering <jim@meyering.net>
Fri, 6 May 1994 18:29:16 +0000 (18:29 +0000)
lib/memchr.c
lib/regex.c

index bb8b81381700a3cb60417465dd3dd83cda0d032b..1fe76548461c8bb5e8b2aac42510b6b5a53dd09f 100644 (file)
@@ -31,6 +31,12 @@ Cambridge, MA 02139, USA.  */
 #endif
 #endif
 
+#if (SIZEOF_LONG != 4 && SIZEOF_LONG != 8)
+ error This function works only on systems for which sizeof(long) is 4 or 8.
+/* The previous line would begin with `#error,' but some compilers can't
+   handle that even when the condition is false.  */
+#endif
+
 /* Search no more than N bytes of S for C.  */
 
 char *
@@ -67,19 +73,18 @@ memchr (s, c, n)
 
      The 1-bits make sure that carries propagate to the next 0-bit.
      The 0-bits provide holes for carries to fall into.  */
-#ifdef LONG_64_BITS
-  /* 64-bit version of the magic.  */
+#if (SIZEOF_LONG == 8)
   magic_bits = ((unsigned long int) 0x7efefefe << 32) | 0xfefefeff;
 #else
   magic_bits = 0x7efefeff;
-#endif /* LONG_64_BITS */
+#endif /* SIZEOF_LONG == 8 */
 
   /* Set up a longword, each of whose bytes is C.  */
   charmask = c | (c << 8);
   charmask |= charmask << 16;
-#ifdef LONG_64_BITS
+#if (SIZEOF_LONG == 8)
   charmask |= charmask << 32;
-#endif /* LONG_64_BITS */
+#endif /* SIZEOF_LONG == 8 */
   if (sizeof (longword) > 8)
     abort ();
 
@@ -149,7 +154,7 @@ memchr (s, c, n)
            return (char *) &cp[2];
          if (cp[3] == c)
            return (char *) &cp[3];
-#ifdef LONG_64_BITS
+#if (SIZEOF_LONG == 8)
          if (cp[4] == c)
            return (char *) &cp[4];
          if (cp[5] == c)
@@ -158,7 +163,7 @@ memchr (s, c, n)
            return (char *) &cp[6];
          if (cp[7] == c)
            return (char *) &cp[7];
-#endif /* LONG_64_BITS */
+#endif /* SIZEOF_LONG == 8 */
        }
 
       n -= sizeof (longword);
index f047ecc3cf27bbe3ef100ec420a2a9c2b07658c5..9e7145d2f63287b53cefb50b317b38afa72b8707 100644 (file)
@@ -3,7 +3,7 @@
    (Implements POSIX draft P10003.2/D11.2, except for
    internationalization features.)
 
-   Copyright (C) 1993 Free Software Foundation, Inc.
+   Copyright (C) 1993, 1994 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
 /* We need this for `regex.h', and perhaps for the Emacs include files.  */
 #include <sys/types.h>
 
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
 /* The `emacs' switch turns on certain matching commands
    that make sense only in Emacs. */
 #ifdef emacs
@@ -67,6 +63,7 @@ char *realloc ();
 
 /* We used to test for `BSTRING' here, but only GCC and Emacs define
    `BSTRING', as far as I know, and neither of them use this code.  */
+#ifndef INHIBIT_STRING_HEADER
 #if HAVE_STRING_H || STDC_HEADERS
 #include <string.h>
 #ifndef bcmp
@@ -81,6 +78,7 @@ char *realloc ();
 #else
 #include <strings.h>
 #endif
+#endif
 
 /* Define the syntax stuff for \<, \>, etc.  */
 
@@ -892,7 +890,7 @@ static const char *re_error_msg[] =
 \f
 /* Avoiding alloca during matching, to placate r_alloc.  */
 
-/* Define MATCH_MAY_ALLOCATE if we need to make sure that the
+/* Define MATCH_MAY_ALLOCATE unless we need to make sure that the
    searching and matching functions should not call alloca.  On some
    systems, alloca is implemented in terms of malloc, and if we're
    using the relocating allocator routines, then malloc could cause a
@@ -2496,11 +2494,32 @@ regex_compile (pattern, size, syntax, bufp)
     /* Since DOUBLE_FAIL_STACK refuses to double only if the current size
        is strictly greater than re_max_failures, the largest possible stack
        is 2 * re_max_failures failure points.  */
-    fail_stack.size = (2 * re_max_failures * MAX_FAILURE_ITEMS);
-    if (! fail_stack.stack)
-      fail_stack.stack =
-       (fail_stack_elt_t *) malloc (fail_stack.size 
-                                    * sizeof (fail_stack_elt_t));
+    if (fail_stack.size < (2 * re_max_failures * MAX_FAILURE_ITEMS))
+      {
+       fail_stack.size = (2 * re_max_failures * MAX_FAILURE_ITEMS);
+
+#ifdef emacs
+       if (! fail_stack.stack)
+         fail_stack.stack
+           = (fail_stack_elt_t *) xmalloc (fail_stack.size 
+                                           * sizeof (fail_stack_elt_t));
+       else
+         fail_stack.stack
+           = (fail_stack_elt_t *) xrealloc (fail_stack.stack,
+                                            (fail_stack.size
+                                             * sizeof (fail_stack_elt_t)));
+#else /* not emacs */
+       if (! fail_stack.stack)
+         fail_stack.stack
+           = (fail_stack_elt_t *) malloc (fail_stack.size 
+                                          * sizeof (fail_stack_elt_t));
+       else
+         fail_stack.stack
+           = (fail_stack_elt_t *) realloc (fail_stack.stack,
+                                           (fail_stack.size
+                                            * sizeof (fail_stack_elt_t)));
+#endif /* not emacs */
+      }
 
     /* Initialize some other variables the matcher uses.  */
     RETALLOC_IF (regstart,      num_regs, const char *);
@@ -3157,7 +3176,11 @@ re_search_2 (bufp, string1, size1, string2, size2, startpos, range, regs, stop)
 
       val = re_match_2_internal (bufp, string1, size1, string2, size2,
                                 startpos, regs, stop);
+#ifndef REGEX_MALLOC
+#ifdef C_ALLOCA
       alloca (0);
+#endif
+#endif
 
       if (val >= 0)
        return startpos;
@@ -4249,8 +4272,10 @@ re_match_2_internal (bufp, string1, size1, string2, size2, pos, regs, stop)
              }
             else if ((re_opcode_t) *p2 == charset)
              {
+#ifdef DEBUG
                register unsigned char c
                   = *p2 == (unsigned char) endline ? '\n' : p2[2];
+#endif
 
                 if ((re_opcode_t) p1[3] == exactn
                    && ! (p2[1] * BYTEWIDTH > p1[4]
@@ -4451,7 +4476,6 @@ re_match_2_internal (bufp, string1, size1, string2, size2, pos, regs, stop)
           goto fail;
 
 #ifdef emacs
-#ifdef emacs19
        case before_dot:
           DEBUG_PRINT1 ("EXECUTING before_dot.\n");
          if (PTR_CHAR_POS ((unsigned char *) d) >= point)
@@ -4469,7 +4493,7 @@ re_match_2_internal (bufp, string1, size1, string2, size2, pos, regs, stop)
           if (PTR_CHAR_POS ((unsigned char *) d) <= point)
            goto fail;
          break;
-#else /* not emacs19 */
+#if 0 /* not emacs19 */
        case at_dot:
           DEBUG_PRINT1 ("EXECUTING at_dot.\n");
          if (PTR_CHAR_POS ((unsigned char *) d) + 1 != point)