| 196 | } |
| 197 | |
| 198 | struct grep_opt *grep_opt_dup(const struct grep_opt *opt) |
| 199 | { |
| 200 | struct grep_pat *pat; |
| 201 | struct grep_opt *ret = xmalloc(sizeof(struct grep_opt)); |
| 202 | *ret = *opt; |
| 203 | |
| 204 | ret->pattern_list = NULL; |
| 205 | ret->pattern_tail = &ret->pattern_list; |
| 206 | |
| 207 | for(pat = opt->pattern_list; pat != NULL; pat = pat->next) |
| 208 | { |
| 209 | if(pat->token == GREP_PATTERN_HEAD) |
| 210 | append_header_grep_pattern(ret, pat->field, |
| 211 | pat->pattern); |
| 212 | else |
| 213 | append_grep_pat(ret, pat->pattern, pat->patternlen, |
| 214 | pat->origin, pat->no, pat->token); |
| 215 | } |
| 216 | |
| 217 | return ret; |
| 218 | } |
| 219 | |
| 220 | static NORETURN void compile_regexp_failed(const struct grep_pat *p, |
| 221 | const char *error) |
no test coverage detected