diff options
Diffstat (limited to 'sed.c')
-rw-r--r-- | sed.c | 15 |
1 files changed, 14 insertions, 1 deletions
@@ -144,8 +144,21 @@ static void destroy_cmd_strs() | |||
144 | */ | 144 | */ |
145 | static int index_of_next_unescaped_regexp_delim(struct sed_cmd *sed_cmd, const char *str, int idx) | 145 | static int index_of_next_unescaped_regexp_delim(struct sed_cmd *sed_cmd, const char *str, int idx) |
146 | { | 146 | { |
147 | int bracket = -1; | ||
148 | int escaped = 0; | ||
149 | |||
147 | for ( ; str[idx]; idx++) { | 150 | for ( ; str[idx]; idx++) { |
148 | if (str[idx] == sed_cmd->delimiter && str[idx-1] != '\\') | 151 | if (bracket != -1) { |
152 | if (str[idx] == ']' && !(bracket == idx - 1 || | ||
153 | (bracket == idx - 2 && str[idx-1] == '^'))) | ||
154 | bracket = -1; | ||
155 | } else if (escaped) | ||
156 | escaped = 0; | ||
157 | else if (str[idx] == '\\') | ||
158 | escaped = 1; | ||
159 | else if (str[idx] == '[') | ||
160 | bracket = idx; | ||
161 | else if (str[idx] == sed_cmd->delimiter) | ||
149 | return idx; | 162 | return idx; |
150 | } | 163 | } |
151 | 164 | ||