universe@27: /* universe@27: * regex_parser.c universe@27: * universe@27: * Created on: 26.01.2012 universe@27: * Author: fox3049 universe@27: */ universe@27: universe@27: #include "regex_parser.h" universe@27: universe@27: regex_parser_t* new_regex_parser_t() { universe@27: regex_parser_t* ret = malloc(sizeof(regex_parser_t)); universe@27: if (ret != NULL) { universe@27: ret->pattern_list = new_string_list_t(); universe@27: ret->matched_lines = 0; universe@27: ret->pattern_match = 0; universe@27: ret->compiled_patterns = NULL; universe@27: } universe@27: return ret; universe@27: } universe@27: universe@27: void destroy_regex_parser_t(regex_parser_t* parser) { universe@27: destroy_string_list_t(parser->pattern_list); universe@27: free(parser); universe@27: } universe@27: universe@27: bool regex_parser_matching(regex_parser_t* parser) { universe@27: return parser->pattern_match > 0; universe@27: } universe@27: universe@27: void regex_compile_all(regex_parser_t* parser) { universe@27: size_t pcount = parser->pattern_list->count; universe@27: if (pcount > 0) { universe@27: if (parser->compiled_patterns != NULL) { universe@27: free(parser->compiled_patterns); universe@27: } universe@27: parser->compiled_patterns = calloc(pcount, sizeof(regex_t)); universe@27: universe@27: regex_t* re = malloc(sizeof(regex_t)); universe@27: for (int i = 0 ; i < pcount ; i++) { universe@27: if (regcomp(re, parser->pattern_list->items[i], universe@27: REG_EXTENDED|REG_NOSUB) == 0) { universe@27: parser->compiled_patterns[i] = re; universe@27: } else { universe@27: fprintf(stderr, "Cannot compile: %s\n", universe@27: (parser->pattern_list->items[i])); universe@27: parser->compiled_patterns[i] = NULL; universe@27: } universe@27: } universe@27: } universe@27: }