aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Mikhirev2014-11-16 23:13:45 +0300
committerDmitry Mikhirev2014-11-16 23:13:45 +0300
commit9340c70b0c57f90220f03017337eadfe78eba96f (patch)
tree3f49e95657d07b5897b04f9d557373bdc5cca011
parentcdc69c4ccbe8fb5d173c1976e71b06aeb756b666 (diff)
downloadmake_pcre-9340c70b0c57f90220f03017337eadfe78eba96f.tar.gz
make_pcre-9340c70b0c57f90220f03017337eadfe78eba96f.tar.bz2
make_pcre-9340c70b0c57f90220f03017337eadfe78eba96f.tar.xz
make_pcre-9340c70b0c57f90220f03017337eadfe78eba96f.zip
undefine empty capture variables after setting really captured
-rw-r--r--pcre.c19
1 files changed, 5 insertions, 14 deletions
diff --git a/pcre.c b/pcre.c
index 73bf0fd..aff9a3d 100644
--- a/pcre.c
+++ b/pcre.c
@@ -26,8 +26,6 @@ int plugin_is_GPL_compatible;
const int MAX_CAP = 256;
-static char *mk_resetvars;
-
char *match(const char *name, int argc, char **argv)
{
char *pat = NULL;
@@ -80,8 +78,6 @@ char *match(const char *name, int argc, char **argv)
}
}
- gmk_eval(mk_resetvars, NULL);
-
if (pat == NULL) {
re = pcre_compile(argv[0], 0, &err, &erroffset, NULL);
} else {
@@ -114,6 +110,11 @@ end_match:
*(str + ovec[i*2 + 1]) = c;
gmk_eval(mk_set, NULL);
}
+ for (; i < MAX_CAP; i++) {
+ char mk_set[14];
+ sprintf(mk_set, "undefine %d\n", i);
+ gmk_eval(mk_set, NULL);
+ }
if (str != NULL) {
gmk_free(str);
}
@@ -122,16 +123,6 @@ end_match:
int pcre_gmk_setup()
{
- int i;
-
- mk_resetvars = malloc(MAX_CAP * 13);
- *mk_resetvars = '\0';
- for (i = 0; i < MAX_CAP; i++) {
- char line[14];
- sprintf(line, "undefine %d\n", i);
- strncat(mk_resetvars, line, 13);
- }
-
gmk_add_function("pcre_find", (gmk_func_ptr)match, 2, 3, GMK_FUNC_NOEXPAND);
gmk_add_function("m", (gmk_func_ptr)match, 2, 3, GMK_FUNC_NOEXPAND);
return 1;