aboutsummaryrefslogtreecommitdiffstats
path: root/re.c
diff options
context:
space:
mode:
Diffstat (limited to 're.c')
-rw-r--r--re.c20
1 files changed, 15 insertions, 5 deletions
diff --git a/re.c b/re.c
index 4ea22c23..cd11d495 100644
--- a/re.c
+++ b/re.c
@@ -3,7 +3,7 @@
*/
/*
- * Copyright (C) 1991, 1992, 1993 the Free Software Foundation, Inc.
+ * Copyright (C) 1991-1995 the Free Software Foundation, Inc.
*
* This file is part of GAWK, the GNU implementation of the
* AWK Progamming Language.
@@ -101,6 +101,9 @@ int dfa;
len = dest - temp;
if ((rerr = re_compile_pattern(temp, len, &(rp->pat))) != NULL)
fatal("%s: /%s/", rerr, temp);
+
+ /* gack. this must be done *after* re_compile_pattern */
+ rp->pat.newline_anchor = 0; /* don't get \n in middle of string */
if (dfa && !ignorecase) {
dfacomp(temp, len, &(rp->dfareg), 1);
rp->dfa = 1;
@@ -136,10 +139,13 @@ int need_start;
str[start+len] = save;
}
if (ret) {
- if (need_start || rp->dfa == 0)
- return re_search(&(rp->pat), str, start+len, start,
- len, &(rp->regs));
- else
+ if (need_start || rp->dfa == 0) {
+ int result = re_search(&(rp->pat), str, start+len,
+ start, len, &(rp->regs));
+ /* recover any space from C based alloca */
+ (void) alloca(0);
+ return result;
+ } else
return 1;
} else
return -1;
@@ -151,6 +157,10 @@ Regexp *rp;
{
free(rp->pat.buffer);
free(rp->pat.fastmap);
+ if (rp->regs.start)
+ free(rp->regs.start);
+ if (rp->regs.end)
+ free(rp->regs.end);
if (rp->dfa)
dfafree(&(rp->dfareg));
free(rp);