]>
Commit | Line | Data |
---|---|---|
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 |