]> jfr.im git - irc/quakenet/newserv.git/blame - chanstats/chanstatshash.c
merge
[irc/quakenet/newserv.git] / chanstats / chanstatshash.c
CommitLineData
c86edd1d
Q
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
14chanstats *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
43chanstats *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