[augeas-devel] augeas: master - * src/regexp.c (regexp_escape): fix stripping of enclosing parens
David Lutterkort
lutter at fedoraproject.org
Fri Nov 13 19:26:52 UTC 2009
Gitweb: http://git.fedorahosted.org/git/augeas.git?p=augeas.git;a=commitdiff;h=f6568ba916e08707e6bb6050eb7c643958fb1c4b
Commit: f6568ba916e08707e6bb6050eb7c643958fb1c4b
Parent: adfc3c0082139324d458b1f5ebbb46b1c5492049
Author: David Lutterkort <lutter at redhat.com>
AuthorDate: Wed Nov 11 16:05:12 2009 -0800
Committer: David Lutterkort <lutter at redhat.com>
CommitterDate: Fri Nov 13 10:45:05 2009 -0800
* src/regexp.c (regexp_escape): fix stripping of enclosing parens
Only strip them if they belong together, and not for something like /(a)(b)/
---
src/regexp.c | 18 +++++++++++++++---
1 files changed, 15 insertions(+), 3 deletions(-)
diff --git a/src/regexp.c b/src/regexp.c
index 795e6f0..15a73af 100644
--- a/src/regexp.c
+++ b/src/regexp.c
@@ -68,9 +68,21 @@ char *regexp_escape(const struct regexp *r) {
}
}
- if (pat[0] == '(' && pat[strlen(pat)-1] == ')')
- memmove(pat, pat+1, strlen(pat+1)+1);
- pat[strlen(pat)] = '\0';
+ if (pat[0] == '(' && pat[strlen(pat)-1] == ')') {
+ int level = 1;
+ for (int i=1; i < strlen(pat)-1; i++) {
+ if (pat[i] == '(')
+ level += 1;
+ if (pat[i] == ')')
+ level -= 1;
+ if (level == 0)
+ break;
+ }
+ if (level == 1) {
+ memmove(pat, pat+1, strlen(pat+1)+1);
+ pat[strlen(pat)-1] = '\0';
+ }
+ }
return pat;
}
More information about the augeas-devel
mailing list