]> jfr.im git - irc/quakenet/newserv.git/blob - chanstats/chanstatshash.c
merge
[irc/quakenet/newserv.git] / chanstats / chanstatshash.c
1
2 #include "chanstats.h"
3 #include "../lib/irc_string.h"
4 #include "../irc/irc_config.h"
5
6 #define chanstatshash(x) (crc32i(x)%CHANSTATSHASHSIZE)
7
8 /*
9 * findchanstats:
10 * Returns a chanstats * for the given channel name.
11 * Creates if necessary.
12 */
13
14 chanstats *findchanstats(const char *channame) {
15 chanstats *csp;
16 unsigned int hash;
17
18 hash=chanstatshash(channame);
19
20 for (csp=chanstatstable[hash];csp;csp=csp->next) {
21 if (!ircd_strcmp(channame,csp->name->content)) {
22 return csp;
23 }
24 }
25
26 /* It didn't match, create a new one */
27 csp=getchanstats();
28 memset(csp,0,sizeof(chanstats));
29 csp->name=getsstring(channame,CHANNELLEN);
30
31 csp->next=chanstatstable[hash];
32 chanstatstable[hash]=csp;
33
34 return csp;
35 }
36
37 /*
38 * findchanstatsifexists:
39 * Returns a chanstats * for the given channel name.
40 * Returns NULL if there are no stats.
41 */
42
43 chanstats *findchanstatsifexists(const char *channame) {
44 chanstats *csp;
45 unsigned int hash;
46
47 hash=chanstatshash(channame);
48
49 for (csp=chanstatstable[hash];csp;csp=csp->next) {
50 if (!ircd_strcmp(channame,csp->name->content)) {
51 return csp;
52 }
53 }
54
55 return NULL;
56 }
57
58
59