source: regex.c @ c4b45ce

owl
Last change on this file since c4b45ce was c4b45ce, checked in by James M. Kretchmar <kretch@mit.edu>, 15 years ago
remove unnecessary sprintf
  • 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];
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    owl_function_makemsg("Error in regular expression: %s", buff1);
56    owl_free(re->string);
57    re->string=NULL;
58    return(-1);
59  }
60
61  return(0);
62}
63
64int owl_regex_create_quoted(owl_regex *re, char *string)
65{
66  char *quoted;
67 
68  quoted=owl_text_quote(string, OWL_REGEX_QUOTECHARS, OWL_REGEX_QUOTEWITH);
69  owl_regex_create(re, quoted);
70  owl_free(quoted);
71  return(0);
72}
73
74int owl_regex_compare(owl_regex *re, char *string)
75{
76  int out, ret;
77
78  /* if the regex is not set we match */
79  if (!owl_regex_is_set(re)) {
80    return(0);
81  }
82 
83  ret=regexec(&(re->re), string, 0, NULL, 0);
84  out=ret;
85  if (re->negate) {
86    out=!out;
87  }
88  return(out);
89}
90
91int owl_regex_is_set(owl_regex *re)
92{
93  if (re->string) return(1);
94  return(0);
95}
96
97char *owl_regex_get_string(owl_regex *re)
98{
99  return(re->string);
100}
101
102void owl_regex_copy(owl_regex *a, owl_regex *b)
103{
104  b->negate=a->negate;
105  b->string=owl_strdup(a->string);
106  memcpy(&(b->re), &(a->re), sizeof(regex_t));
107}
108
109void owl_regex_free(owl_regex *re)
110{
111  if (re->string) owl_free(re->string);
112
113  /* do we need to free the regular expression? */
114}
Note: See TracBrowser for help on using the repository browser.