X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/3e9fa60a5c99568817a12a1011b0e61cce5d3a67..a859d1cc237eca05a8db2ccde69db9da1dc9e39c:/src/regex.c diff --git a/src/regex.c b/src/regex.c index 622db708b9..766ad26e70 100644 --- a/src/regex.c +++ b/src/regex.c @@ -457,11 +457,17 @@ init_syntax_once (void) # endif /* not alloca */ -# define REGEX_ALLOCATE alloca +# ifdef emacs +# define REGEX_USE_SAFE_ALLOCA USE_SAFE_ALLOCA +# define REGEX_SAFE_FREE() SAFE_FREE () +# define REGEX_ALLOCATE SAFE_ALLOCA +# else +# define REGEX_ALLOCATE alloca +# endif /* Assumes a `char *destination' variable. */ # define REGEX_REALLOCATE(source, osize, nsize) \ - (destination = alloca (nsize), \ + (destination = REGEX_ALLOCATE (nsize), \ memcpy (destination, source, osize)) /* No need to do anything to free, after alloca. */ @@ -469,6 +475,11 @@ init_syntax_once (void) #endif /* not REGEX_MALLOC */ +#ifndef REGEX_USE_SAFE_ALLOCA +# define REGEX_USE_SAFE_ALLOCA ((void) 0) +# define REGEX_SAFE_FREE() ((void) 0) +#endif + /* Define how to allocate the failure stack. */ #if defined REL_ALLOC && defined REGEX_MALLOC @@ -482,22 +493,10 @@ init_syntax_once (void) #else /* not using relocating allocator */ -# ifdef REGEX_MALLOC - -# define REGEX_ALLOCATE_STACK malloc -# define REGEX_REALLOCATE_STACK(source, osize, nsize) realloc (source, nsize) -# define REGEX_FREE_STACK free - -# else /* not REGEX_MALLOC */ +# define REGEX_ALLOCATE_STACK(size) REGEX_ALLOCATE (size) +# define REGEX_REALLOCATE_STACK(source, o, n) REGEX_REALLOCATE (source, o, n) +# define REGEX_FREE_STACK(ptr) REGEX_FREE (ptr) -# define REGEX_ALLOCATE_STACK alloca - -# define REGEX_REALLOCATE_STACK(source, osize, nsize) \ - REGEX_REALLOCATE (source, osize, nsize) -/* No need to explicitly free anything. */ -# define REGEX_FREE_STACK(arg) ((void)0) - -# endif /* not REGEX_MALLOC */ #endif /* not using relocating allocator */ @@ -516,10 +515,12 @@ init_syntax_once (void) #define STREQ(s1, s2) ((strcmp (s1, s2) == 0)) -#undef MAX -#undef MIN -#define MAX(a, b) ((a) > (b) ? (a) : (b)) -#define MIN(a, b) ((a) < (b) ? (a) : (b)) +#ifndef emacs +# undef max +# undef min +# define max(a, b) ((a) > (b) ? (a) : (b)) +# define min(a, b) ((a) < (b) ? (a) : (b)) +#endif /* Type of source-pattern and string chars. */ #ifdef _MSC_VER @@ -1190,12 +1191,7 @@ print_double_string (re_char *where, re_char *string1, ssize_t size1, # define assert(e) # define DEBUG_STATEMENT(e) -# if __STDC_VERSION__ < 199901L -# define DEBUG_COMPILES_ARGUMENTS -# define DEBUG_PRINT /* 'DEBUG_PRINT (x, y)' discards X and Y. */ (void) -# else -# define DEBUG_PRINT(...) -# endif +# define DEBUG_PRINT(...) # define DEBUG_PRINT_COMPILED_PATTERN(p, s, e) # define DEBUG_PRINT_DOUBLE_STRING(w, s1, sz1, s2, sz2) @@ -1400,14 +1396,14 @@ typedef struct : ((fail_stack).stack \ = REGEX_REALLOCATE_STACK ((fail_stack).stack, \ (fail_stack).size * sizeof (fail_stack_elt_t), \ - MIN (re_max_failures * TYPICAL_FAILURE_SIZE, \ + min (re_max_failures * TYPICAL_FAILURE_SIZE, \ ((fail_stack).size * sizeof (fail_stack_elt_t) \ * FAIL_STACK_GROWTH_FACTOR))), \ \ (fail_stack).stack == NULL \ ? 0 \ : ((fail_stack).size \ - = (MIN (re_max_failures * TYPICAL_FAILURE_SIZE, \ + = (min (re_max_failures * TYPICAL_FAILURE_SIZE, \ ((fail_stack).size * sizeof (fail_stack_elt_t) \ * FAIL_STACK_GROWTH_FACTOR)) \ / sizeof (fail_stack_elt_t)), \ @@ -2315,8 +2311,8 @@ set_image_of_range (struct range_table_work_area *work_area, cmin = c, cmax = c; else { - cmin = MIN (cmin, c); - cmax = MAX (cmax, c); + cmin = min (cmin, c); + cmax = max (cmax, c); } } } @@ -2995,7 +2991,7 @@ regex_compile (const_re_char *pattern, size_t size, reg_syntax_t syntax, #else /* emacs */ if (c < 128) { - ch = MIN (127, c1); + ch = min (127, c1); SETUP_ASCII_RANGE (range_table_work, c, ch); c = ch + 1; if (CHAR_BYTE8_P (c1)) @@ -4347,8 +4343,7 @@ re_search_2 (struct re_pattern_buffer *bufp, const char *str1, size_t size1, if (range > 0) /* Searching forwards. */ { - register int lim = 0; - ssize_t irange = range; + ssize_t irange = range, lim = 0; if (startpos < size1 && startpos + range >= size1) lim = range - (size1 - startpos); @@ -4585,6 +4580,7 @@ static int bcmp_translate (re_char *s1, re_char *s2, FREE_VAR (regend); \ FREE_VAR (best_regstart); \ FREE_VAR (best_regend); \ + REGEX_SAFE_FREE (); \ } while (0) #else # define FREE_VARIABLES() ((void)0) /* Do nothing! But inhibit gcc warning. */ @@ -5024,6 +5020,8 @@ re_match_2_internal (struct re_pattern_buffer *bufp, const_re_char *string1, DEBUG_PRINT ("\n\nEntering re_match_2.\n"); + REGEX_USE_SAFE_ALLOCA; + INIT_FAIL_STACK (); #ifdef MATCH_MAY_ALLOCATE @@ -5214,7 +5212,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp, const_re_char *string1, { /* No. So allocate them with malloc. We need one extra element beyond `num_regs' for the `-1' marker GNU code uses. */ - regs->num_regs = MAX (RE_NREGS, num_regs + 1); + regs->num_regs = max (RE_NREGS, num_regs + 1); regs->start = TALLOC (regs->num_regs, regoff_t); regs->end = TALLOC (regs->num_regs, regoff_t); if (regs->start == NULL || regs->end == NULL) @@ -5258,7 +5256,7 @@ re_match_2_internal (struct re_pattern_buffer *bufp, const_re_char *string1, /* Go through the first `min (num_regs, regs->num_regs)' registers, since that is all we initialized. */ - for (reg = 1; reg < MIN (num_regs, regs->num_regs); reg++) + for (reg = 1; reg < min (num_regs, regs->num_regs); reg++) { if (REG_UNSET (regstart[reg]) || REG_UNSET (regend[reg])) regs->start[reg] = regs->end[reg] = -1;