diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2013-03-11 22:51:34 +0200 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2013-03-11 22:51:34 +0200 |
commit | aeaf54a1b4445cf05935e6c9e3b700b4c352490a (patch) | |
tree | f085e3cd9f85e2c1e2bcb0534615a77a8b5ce4c3 /re.c | |
parent | 087cb82ddc80e61b823c2d61a2db1ff784f779b4 (diff) | |
parent | 891b30a5417f93c3fc5e5aa4d54e270282bea380 (diff) | |
download | egawk-aeaf54a1b4445cf05935e6c9e3b700b4c352490a.tar.gz egawk-aeaf54a1b4445cf05935e6c9e3b700b4c352490a.tar.bz2 egawk-aeaf54a1b4445cf05935e6c9e3b700b4c352490a.zip |
Merge branch 'master' into porting
Diffstat (limited to 're.c')
-rw-r--r-- | re.c | 18 |
1 files changed, 16 insertions, 2 deletions
@@ -559,8 +559,22 @@ again: if (*sp == '[') count++; - else if (*sp == ']') - count--; + /* + * ] as first char after open [ is skipped + * \] is skipped + * [^]] is skipped + */ + if (*sp == ']' && sp > sp2) { + if (sp[-1] != '[' + && sp[-1] != '\\') + ; + else if ((sp - sp2) >= 2 + && sp[-1] == '^' && sp[-2] == '[') + ; + else + count--; + } + if (*sp == '-' && do_lint && ! range_warned && count == 1 && sp[-1] != '[' && sp[1] != ']' && ! isdigit((unsigned char) sp[-1]) && ! isdigit((unsigned char) sp[1]) |