source: regex.c @ 488ebf6

owl
Last change on this file since 488ebf6 was fa00c5c, checked in by James M. Kretchmar <kretch@mit.edu>, 15 years ago
Correct license.
  • Property mode set to 100644
File size: 2.5 KB
Line 
1/* Copyright (c) 2002,2003,2004,2009 James M. Kretchmar
2 *
3 * This file is part of Owl.
4 *
5 * Owl is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
9 *
10 * Owl is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with Owl.  If not, see <http://www.gnu.org/licenses/>.
17 *
18 * ---------------------------------------------------------------
19 *
20 * As of Owl version 2.1.12 there are patches contributed by
21 * developers of the branched BarnOwl project, Copyright (c)
22 * 2006-2009 The BarnOwl Developers. All rights reserved.
23 */
24
25#include <string.h>
26#include "owl.h"
27
28static const char fileIdent[] = "$Id$";
29
30void owl_regex_init(owl_regex *re)
31{
32  re->negate=0;
33  re->string=NULL;
34}
35
36int owl_regex_create(owl_regex *re, char *string)
37{
38  int ret;
39  char buff1[LINE], buff2[LINE];
40  char *ptr;
41 
42  re->string=owl_strdup(string);
43
44  ptr=string;
45  re->negate=0;
46  if (string[0]=='!') {
47    ptr++;
48    re->negate=1;
49  }
50
51  /* set the regex */
52  ret=regcomp(&(re->re), ptr, REG_EXTENDED|REG_ICASE);
53  if (ret) {
54    regerror(ret, NULL, buff1, LINE);
55    sprintf(buff2, "Error in regular expression: %s", buff1);
56    owl_function_makemsg(buff2);
57    owl_free(re->string);
58    re->string=NULL;
59    return(-1);
60  }
61
62  return(0);
63}
64
65int owl_regex_create_quoted(owl_regex *re, char *string)
66{
67  char *quoted;
68 
69  quoted=owl_text_quote(string, OWL_REGEX_QUOTECHARS, OWL_REGEX_QUOTEWITH);
70  owl_regex_create(re, quoted);
71  owl_free(quoted);
72  return(0);
73}
74
75int owl_regex_compare(owl_regex *re, char *string)
76{
77  int out, ret;
78
79  /* if the regex is not set we match */
80  if (!owl_regex_is_set(re)) {
81    return(0);
82  }
83 
84  ret=regexec(&(re->re), string, 0, NULL, 0);
85  out=ret;
86  if (re->negate) {
87    out=!out;
88  }
89  return(out);
90}
91
92int owl_regex_is_set(owl_regex *re)
93{
94  if (re->string) return(1);
95  return(0);
96}
97
98char *owl_regex_get_string(owl_regex *re)
99{
100  return(re->string);
101}
102
103void owl_regex_copy(owl_regex *a, owl_regex *b)
104{
105  b->negate=a->negate;
106  b->string=owl_strdup(a->string);
107  memcpy(&(b->re), &(a->re), sizeof(regex_t));
108}
109
110void owl_regex_free(owl_regex *re)
111{
112  if (re->string) owl_free(re->string);
113
114  /* do we need to free the regular expression? */
115}
Note: See TracBrowser for help on using the repository browser.