diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2014-02-20 20:29:56 +0200 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2014-02-20 20:29:56 +0200 |
commit | 0b8ef4f18527f751ef60fc3202cd7143079121fb (patch) | |
tree | 2248a90191e54bc8f62b564077dd06399f035136 /dfa.c | |
parent | 6a0dfc98997cf61f34ed04904ee7b7e9124338ef (diff) | |
parent | c0aeaf87402aa2670e76a32a888053fb64b879b0 (diff) | |
download | egawk-0b8ef4f18527f751ef60fc3202cd7143079121fb.tar.gz egawk-0b8ef4f18527f751ef60fc3202cd7143079121fb.tar.bz2 egawk-0b8ef4f18527f751ef60fc3202cd7143079121fb.zip |
Merge branch 'gawk-4.1-stable'
Diffstat (limited to 'dfa.c')
-rw-r--r-- | dfa.c | 27 |
1 files changed, 27 insertions, 0 deletions
@@ -1148,6 +1148,7 @@ parse_bracket_exp (void) } else { +#ifdef GAWK c1 = c; if (case_fold) { @@ -1156,6 +1157,32 @@ parse_bracket_exp (void) } for (c = c1; c <= c2; c++) setbit_case_fold_c (c, ccl); +#else + /* Defer to the system regex library about the meaning + of range expressions. */ + regex_t re; + char pattern[6] = { '[', 0, '-', 0, ']', 0 }; + char subject[2] = { 0, 0 }; + c1 = c; + if (case_fold) + { + c1 = tolower (c1); + c2 = tolower (c2); + } + + pattern[1] = c1; + pattern[3] = c2; + regcomp (&re, pattern, REG_NOSUB); + for (c = 0; c < NOTCHAR; ++c) + { + if ((case_fold && isupper (c))) + continue; + subject[0] = c; + if (regexec (&re, subject, 0, NULL, 0) != REG_NOMATCH) + setbit_case_fold_c (c, ccl); + } + regfree (&re); +#endif } colon_warning_state |= 8; |