Home | History | Annotate | Download | only in src

Lines Matching defs:regex

7 #include "regex.h"
62 pcre2_code *regex; /* compiled regular expression */
71 int regex_prepare_data(struct regex_data **regex, char const *pattern_string,
76 *regex = regex_data_create();
77 if (!(*regex))
80 (*regex)->regex = pcre2_compile(
83 if (!(*regex)->regex) {
87 (*regex)->match_data =
88 pcre2_match_data_create_from_pattern((*regex)->regex, NULL);
89 if (!(*regex)->match_data) {
95 regex_data_free(*regex);
96 *regex = NULL;
111 int regex_load_mmap(struct mmap_area *mmap_area, struct regex_data **regex,
131 *regex = regex_data_create();
132 if (!*regex)
135 rc = pcre2_serialize_decode(&(*regex)->regex, 1,
141 (*regex)->match_data =
142 pcre2_match_data_create_from_pattern((*regex)->regex, NULL);
143 if (!(*regex)->match_data)
156 regex_data_free(*regex);
157 *regex = NULL;
161 int regex_writef(struct regex_data *regex, FILE *fp, int do_write_precompregex)
171 rc = pcre2_serialize_encode((const pcre2_code **)&regex->regex,
201 void regex_data_free(struct regex_data *regex)
203 if (regex) {
204 if (regex->regex)
205 pcre2_code_free(regex->regex);
206 if (regex->match_data)
207 pcre2_match_data_free(regex->match_data);
208 __pthread_mutex_destroy(&regex->match_mutex);
209 free(regex);
213 int regex_match(struct regex_data *regex, char const *subject, int partial)
216 __pthread_mutex_lock(&regex->match_mutex);
218 regex->regex, (PCRE2_SPTR)subject, PCRE2_ZERO_TERMINATED, 0,
219 partial ? PCRE2_PARTIAL_SOFT : 0, regex->match_data, NULL);
220 __pthread_mutex_unlock(&regex->match_mutex);
246 rc = pcre2_pattern_info(regex1->regex, PCRE2_INFO_SIZE, &len1);
248 rc = pcre2_pattern_info(regex2->regex, PCRE2_INFO_SIZE, &len2);
250 if (len1 != len2 || memcmp(regex1->regex, regex2->regex, len1))
277 * non zero if regex and pcre_extra is owned by this
280 pcre *regex; /* compiled regular expression */
287 int regex_prepare_data(struct regex_data **regex, char const *pattern_string,
292 *regex = regex_data_create();
293 if (!(*regex))
296 (*regex)->regex =
299 if (!(*regex)->regex)
302 (*regex)->owned = 1;
304 (*regex)->sd = pcre_study((*regex)->regex, 0, &errordata->error_buffer);
305 if (!(*regex)->sd && errordata->error_buffer)
311 regex_data_free(*regex);
312 *regex = NULL;
321 int regex_load_mmap(struct mmap_area *mmap_area, struct regex_data **regex,
332 *regex = regex_data_create();
333 if (!(*regex))
336 (*regex)->owned = 0;
337 (*regex)->regex = (pcre *)mmap_area->next_addr;
343 * Check that regex lengths match. pcre_fullinfo()
346 rc = pcre_fullinfo((*regex)->regex, NULL, PCRE_INFO_SIZE, &info_len);
355 (*regex)->lsd.study_data = (void *)mmap_area->next_addr;
356 (*regex)->lsd.flags |= PCRE_EXTRA_STUDY_DATA;
362 rc = pcre_fullinfo((*regex)->regex, &(*regex)->lsd,
372 regex_data_free(*regex);
373 *regex = NULL;
377 static inline pcre_extra *get_pcre_extra(struct regex_data *regex)
379 if (!regex) return NULL;
380 if (regex->owned) {
381 return regex->sd;
382 } else if (regex->lsd.study_data) {
383 return &regex->lsd;
389 int regex_writef(struct regex_data *regex, FILE *fp,
396 pcre_extra *sd = get_pcre_extra(regex);
399 rc = pcre_fullinfo(regex->regex, NULL, PCRE_INFO_SIZE, &size);
410 len = fwrite(regex->regex, 1, to_write, fp);
417 pcre_fullinfo(regex->regex, sd, PCRE_INFO_STUDYSIZE, &size);
439 void regex_data_free(struct regex_data *regex)
441 if (regex) {
442 if (regex->owned) {
443 if (regex->regex)
444 pcre_free(regex->regex);
445 if (regex->sd)
446 pcre_free_study(regex->sd);
448 free(regex);
452 int regex_match(struct regex_data *regex, char const *subject, int partial)
456 rc = pcre_exec(regex->regex, get_pcre_extra(regex),
484 rc = pcre_fullinfo(regex1->regex, NULL, PCRE_INFO_SIZE, &len1);
486 rc = pcre_fullinfo(regex2->regex, NULL, PCRE_INFO_SIZE, &len2);
488 if (len1 != len2 || memcmp(regex1->regex, regex2->regex, len1))
510 rc = snprintf(buffer, buf_size, "REGEX back-end error: ");