]> jfr.im git - irc/quakenet/newserv.git/blame - helpmod2/hticket.c
updated with latest helpmod2 changes from strutsi, v203 (20050528)
[irc/quakenet/newserv.git] / helpmod2 / hticket.c
CommitLineData
c86edd1d
Q
1#include <time.h>
2#include <stdlib.h>
3#include <string.h>
4
5#include "hchannel.h"
6#include "hticket.h"
7#include "hgen.h"
8
9hticket *hticket_get(char *authname, struct hchannel_struct *hchan)
10{
11 hticket *tmp;
12 if (hchan == NULL)
13 return NULL;
14 for (tmp = hchan->htickets;tmp;tmp = tmp->next)
15 if (!ci_strcmp(authname, tmp->authname))
16 return tmp;
17 return NULL;
18}
19
20hticket *hticket_del(hticket *htick, struct hchannel_struct *hchan)
21{
22 hticket **ptr;
23 for (ptr = &hchan->htickets;*ptr;ptr = &(*ptr)->next)
24 if (*ptr == htick)
25 {
b808acb7 26 hticket *tmp = (*ptr)->next;
27 free(*ptr);
28 *ptr = tmp;
c86edd1d
Q
29 return NULL;
30 }
31
32 return htick;
33}
34
35hticket *hticket_add(char *authname, time_t expiration, struct hchannel_struct *hchan)
36{
37 hticket *tmp = hticket_get(authname, hchan);
38
39 if (hchan == NULL)
40 return NULL;
41
42 if (tmp != NULL)
43 return tmp;
44
45 tmp = (hticket*)malloc(sizeof(struct hticket_struct));
46
47 strcpy(tmp->authname, authname);
48 tmp->time_expiration = expiration;
49 tmp->next = hchan->htickets;
50
51 hchan->htickets = tmp;
52
53 return tmp;
54}
55
56int hticket_count(void)
57{
58 int count = 0;
59 hticket *htick;
60 hchannel *hchan;
61
62 for (hchan = hchannels;hchan;hchan = hchan->next)
63 for (htick = hchan->htickets;htick;htick = htick->next)
64 count++;
65
66 return count;
67}
68
69void hticket_remove_expired(void)
70{
71 hchannel *hchan;
b808acb7 72 hticket **tmp;
c86edd1d 73 for (hchan = hchannels;hchan;hchan = hchan->next)
b808acb7 74 {
75 tmp = &hchan->htickets;
76 while (*tmp)
77 if ((*tmp)->time_expiration < time(NULL))
78 hticket_del(*tmp, hchan);
79 else
80 tmp = &(*tmp)->next;
81 }
c86edd1d 82}