]> jfr.im git - irc/quakenet/newserv.git/blob - helpmod2/hcensor.c
updated with latest helpmod2 changes from strutsi, v203 (20050528)
[irc/quakenet/newserv.git] / helpmod2 / hcensor.c
1 #include <stdlib.h>
2 #include <stdio.h> /* for debug */
3 #include <string.h>
4
5 #include "hcensor.h"
6
7 #include "hgen.h"
8
9 hcensor *hcensor_get_by_pattern(hcensor *hcens, const char *pat)
10 {
11 for (;hcens;hcens = hcens->next)
12 if (!ci_strcmp(pat, hcens->pattern->content))
13 return hcens;
14 return NULL;
15 }
16
17 hcensor *hcensor_get_by_index(hcensor *hcens, int index)
18 {
19 if (index > 512) /* some sanity */
20 return NULL;
21
22 while (index && hcens)
23 hcens = hcens->next;
24
25 return hcens;
26 }
27
28 hcensor *hcensor_check(hcensor *hcens, const char *str)
29 {
30 for (;hcens;hcens = hcens->next)
31 if (strregexp(str, hcens->pattern->content))
32 return hcens;
33 return NULL;
34 }
35
36 hcensor *hcensor_add(hcensor **hcens, const char *pat, const char *rsn)
37 {
38 hcensor *tmp;
39
40 if (hcensor_get_by_pattern(*hcens, pat))
41 return NULL;
42
43 tmp = malloc(sizeof(hcensor));
44 tmp->next = *hcens;
45
46 tmp->pattern = getsstring(pat, strlen(pat));
47 if (rsn)
48 tmp->reason = getsstring(rsn, strlen(rsn));
49 else
50 tmp->reason = NULL;
51
52 *hcens = tmp;
53
54 return tmp;
55 }
56
57 hcensor *hcensor_del(hcensor **hcens, hcensor *ptr)
58 {
59 for (;*hcens;hcens = &(*hcens)->next)
60 if (*hcens == ptr)
61 {
62 hcensor *tmp = (*hcens)->next;
63 freesstring((*hcens)->pattern);
64 freesstring((*hcens)->reason);
65 free (*hcens);
66 *hcens = tmp;
67 return NULL;
68 }
69 return ptr;
70 }
71
72 void hcensor_del_all(hcensor **hcens)
73 {
74 while (*hcens)
75 hcensor_del(hcens, *hcens);
76 }
77
78 int hcensor_count(hcensor *hcens)
79 {
80 int count = 0;
81 for (;hcens;hcens = hcens->next, count++);
82 return count;
83 }