Lines Matching refs:regex

7 #include "regex.h"
67 pcre2_code *regex; /* compiled regular expression */
70 int regex_prepare_data(struct regex_data **regex, char const *pattern_string,
75 *regex = regex_data_create();
76 if (!(*regex))
79 (*regex)->regex = pcre2_compile(
82 if (!(*regex)->regex) {
89 regex_data_free(*regex);
90 *regex = NULL;
105 int regex_load_mmap(struct mmap_area *mmap_area, struct regex_data **regex,
125 *regex = regex_data_create();
126 if (!*regex)
129 rc = pcre2_serialize_decode(&(*regex)->regex, 1,
145 regex_data_free(*regex);
146 *regex = NULL;
150 int regex_writef(struct regex_data *regex, FILE *fp, int do_write_precompregex)
160 rc = pcre2_serialize_encode((const pcre2_code **)&regex->regex,
211 void regex_data_free(struct regex_data *regex)
213 if (regex) {
214 if (regex->regex)
215 pcre2_code_free(regex->regex);
216 free(regex);
220 int regex_match(struct regex_data *regex, char const *subject, int partial)
243 match_data = pcre2_match_data_create_from_pattern(regex->regex,
250 regex->regex, (PCRE2_SPTR)subject, PCRE2_ZERO_TERMINATED, 0,
281 rc = pcre2_pattern_info(regex1->regex, PCRE2_INFO_SIZE, &len1);
283 rc = pcre2_pattern_info(regex2->regex, PCRE2_INFO_SIZE, &len2);
285 if (len1 != len2 || memcmp(regex1->regex, regex2->regex, len1))
322 * non zero if regex and pcre_extra is owned by this
325 pcre *regex; /* compiled regular expression */
332 int regex_prepare_data(struct regex_data **regex, char const *pattern_string,
337 *regex = regex_data_create();
338 if (!(*regex))
341 (*regex)->regex =
344 if (!(*regex)->regex)
347 (*regex)->owned = 1;
349 (*regex)->sd = pcre_study((*regex)->regex, 0, &errordata->error_buffer);
350 if (!(*regex)->sd && errordata->error_buffer)
356 regex_data_free(*regex);
357 *regex = NULL;
366 int regex_load_mmap(struct mmap_area *mmap_area, struct regex_data **regex,
377 *regex = regex_data_create();
378 if (!(*regex))
381 (*regex)->owned = 0;
382 (*regex)->regex = (pcre *)mmap_area->next_addr;
388 * Check that regex lengths match. pcre_fullinfo()
391 rc = pcre_fullinfo((*regex)->regex, NULL, PCRE_INFO_SIZE, &info_len);
400 (*regex)->lsd.study_data = (void *)mmap_area->next_addr;
401 (*regex)->lsd.flags |= PCRE_EXTRA_STUDY_DATA;
407 rc = pcre_fullinfo((*regex)->regex, &(*regex)->lsd,
417 regex_data_free(*regex);
418 *regex = NULL;
422 static inline pcre_extra *get_pcre_extra(struct regex_data *regex)
424 if (!regex) return NULL;
425 if (regex->owned) {
426 return regex->sd;
427 } else if (regex->lsd.study_data) {
428 return &regex->lsd;
434 int regex_writef(struct regex_data *regex, FILE *fp,
441 pcre_extra *sd = get_pcre_extra(regex);
444 rc = pcre_fullinfo(regex->regex, NULL, PCRE_INFO_SIZE, &size);
455 len = fwrite(regex->regex, 1, to_write, fp);
462 pcre_fullinfo(regex->regex, sd, PCRE_INFO_STUDYSIZE, &size);
484 void regex_data_free(struct regex_data *regex)
486 if (regex) {
487 if (regex->owned) {
488 if (regex->regex)
489 pcre_free(regex->regex);
490 if (regex->sd)
491 pcre_free_study(regex->sd);
493 free(regex);
497 int regex_match(struct regex_data *regex, char const *subject, int partial)
501 rc = pcre_exec(regex->regex, get_pcre_extra(regex),
529 rc = pcre_fullinfo(regex1->regex, NULL, PCRE_INFO_SIZE, &len1);
531 rc = pcre_fullinfo(regex2->regex, NULL, PCRE_INFO_SIZE, &len2);
533 if (len1 != len2 || memcmp(regex1->regex, regex2->regex, len1))