(re_compile_fastmap): Don't free stack if it's empty.
authorRichard Stallman <rms@gnu.org>
Mon, 15 May 1995 23:30:28 +0000 (23:30 +0000)
committerRichard Stallman <rms@gnu.org>
Mon, 15 May 1995 23:30:28 +0000 (23:30 +0000)
(re_match_failures): Reduce the larger value to 200000,
and use whenever if MATCH_MAY_ALLOCATE.
(MATCH_MAY_ALLOCATE): Don't consider REL_ALLOC when deciding
whether to undef this.

regex.c

diff --git a/regex.c b/regex.c
index 3c0392a59a0504de605d2d13e5478c4faba00c8b..74fca1cbbae6c8823db708f393b87b544a4158b7 100644 (file)
--- a/regex.c
+++ b/regex.c
@@ -960,8 +960,11 @@ static const char *re_error_msgid[] =
 #endif
 
 /* The match routines may not allocate if (1) they would do it with malloc
-   and (2) it's not safe for them to use malloc.  */
-#if (defined (C_ALLOCA) || defined (REGEX_MALLOC)) && (defined (emacs) || defined (REL_ALLOC))
+   and (2) it's not safe for them to use malloc.
+   Note that if REL_ALLOC is defined, matching would not use malloc for the
+   failure stack, but we would still use it for the register vectors;
+   so REL_ALLOC should not affect this.  */
+#if (defined (C_ALLOCA) || defined (REGEX_MALLOC)) && defined (emacs)
 #undef MATCH_MAY_ALLOCATE
 #endif
 
@@ -982,8 +985,8 @@ static const char *re_error_msgid[] =
    exactly that if always used MAX_FAILURE_SPACE each time we failed.
    This is a variable only so users of regex can assign to it; we never
    change it ourselves.  */
-#ifdef REL_ALLOC
-int re_max_failures = 20000000;
+#if defined (MATCH_MAY_ALLOCATE)
+int re_max_failures = 200000;
 #else
 int re_max_failures = 2000;
 #endif
@@ -3138,7 +3141,8 @@ re_compile_fastmap (bufp)
   bufp->can_be_null |= path_can_be_null;
 
  done:
-  REGEX_FREE_STACK (fail_stack.stack);
+  if (!FAIL_STACK_EMPTY ())
+     REGEX_FREE_STACK (fail_stack.stack);
   return 0;
 } /* re_compile_fastmap */
 \f