]>
Commit | Line | Data |
---|---|---|
ee9335d1 VY |
1 | diff -r e6b8fd0ebc1f include/channel.h |
2 | --- a/include/channel.h Tue Apr 08 16:14:01 2008 +0400 | |
3 | +++ b/include/channel.h Tue Apr 08 17:28:26 2008 +0400 | |
4 | @@ -258,7 +258,7 @@ | |
5 | extern void set_channel_mode(struct Client *client_p, struct Client *source_p, | |
6 | struct Channel *chptr, struct membership *msptr, int parc, const char *parv[]); | |
7 | ||
8 | -extern const struct mode_letter chmode_flags[]; | |
9 | +extern int chmode_flags[256]; | |
10 | ||
11 | extern struct ChannelMode chmode_table[256]; | |
12 | ||
ee9335d1 VY |
13 | diff -r e6b8fd0ebc1f modules/core/m_join.c |
14 | --- a/modules/core/m_join.c Tue Apr 08 16:14:01 2008 +0400 | |
15 | +++ b/modules/core/m_join.c Tue Apr 08 17:28:26 2008 +0400 | |
16 | @@ -581,48 +581,6 @@ | |
17 | { | |
18 | switch (*(s++)) | |
19 | { | |
20 | - case 'i': | |
21 | - mode.mode |= MODE_INVITEONLY; | |
22 | - break; | |
23 | - case 'n': | |
24 | - mode.mode |= MODE_NOPRIVMSGS; | |
25 | - break; | |
26 | - case 'p': | |
27 | - mode.mode |= MODE_PRIVATE; | |
28 | - break; | |
29 | - case 's': | |
30 | - mode.mode |= MODE_SECRET; | |
31 | - break; | |
32 | - case 'm': | |
33 | - mode.mode |= MODE_MODERATED; | |
34 | - break; | |
35 | - case 't': | |
36 | - mode.mode |= MODE_TOPICLIMIT; | |
37 | - break; | |
38 | - case 'r': | |
39 | - mode.mode |= MODE_REGONLY; | |
40 | - break; | |
41 | - case 'L': | |
42 | - mode.mode |= MODE_EXLIMIT; | |
43 | - break; | |
44 | - case 'P': | |
45 | - mode.mode |= MODE_PERMANENT; | |
46 | - break; | |
47 | - case 'c': | |
48 | - mode.mode |= MODE_NOCOLOR; | |
49 | - break; | |
50 | - case 'g': | |
51 | - mode.mode |= MODE_FREEINVITE; | |
52 | - break; | |
53 | - case 'z': | |
54 | - mode.mode |= MODE_OPMODERATE; | |
55 | - break; | |
56 | - case 'F': | |
57 | - mode.mode |= MODE_FREETARGET; | |
58 | - break; | |
59 | - case 'Q': | |
60 | - mode.mode |= MODE_DISFORWARD; | |
61 | - break; | |
62 | case 'f': | |
63 | strlcpy(mode.forward, parv[4 + args], sizeof(mode.forward)); | |
64 | args++; | |
65 | @@ -649,6 +607,11 @@ | |
66 | if(parc < 5 + args) | |
67 | return 0; | |
68 | break; | |
69 | + default: | |
70 | + if(chmode_flags[(int) *s] != 0) | |
71 | + { | |
72 | + mode.mode |= chmode_flags[(int) *s]; | |
73 | + } | |
74 | } | |
75 | } | |
76 | ||
77 | @@ -1124,30 +1087,30 @@ | |
78 | int i; | |
79 | ||
80 | /* ok, first get a list of modes we need to add */ | |
81 | - for (i = 0; chmode_flags[i].letter; i++) | |
82 | + for (i = 0; i < 256; i++) | |
83 | { | |
84 | - if((mode->mode & chmode_flags[i].mode) && !(oldmode->mode & chmode_flags[i].mode)) | |
85 | + if((mode->mode & chmode_flags[i]) && !(oldmode->mode & chmode_flags[i])) | |
86 | { | |
87 | if(dir != MODE_ADD) | |
88 | { | |
89 | *mbuf++ = '+'; | |
90 | dir = MODE_ADD; | |
91 | } | |
92 | - *mbuf++ = chmode_flags[i].letter; | |
93 | + *mbuf++ = i; | |
94 | } | |
95 | } | |
96 | ||
97 | /* now the ones we need to remove. */ | |
98 | - for (i = 0; chmode_flags[i].letter; i++) | |
99 | + for (i = 0; i < 256; i++) | |
100 | { | |
101 | - if((oldmode->mode & chmode_flags[i].mode) && !(mode->mode & chmode_flags[i].mode)) | |
102 | + if((oldmode->mode & chmode_flags[i]) && !(mode->mode & chmode_flags[i])) | |
103 | { | |
104 | if(dir != MODE_DEL) | |
105 | { | |
106 | *mbuf++ = '-'; | |
107 | dir = MODE_DEL; | |
108 | } | |
109 | - *mbuf++ = chmode_flags[i].letter; | |
110 | + *mbuf++ = i; | |
111 | } | |
112 | } | |
113 | ||
114 | diff -r e6b8fd0ebc1f src/channel.c | |
115 | --- a/src/channel.c Tue Apr 08 16:14:01 2008 +0400 | |
116 | +++ b/src/channel.c Tue Apr 08 17:28:26 2008 +0400 | |
117 | @@ -1080,25 +1080,6 @@ | |
118 | } | |
119 | } | |
120 | ||
121 | -const struct mode_letter chmode_flags[] = | |
122 | -{ | |
123 | - {MODE_INVITEONLY, 'i'}, | |
124 | - {MODE_MODERATED, 'm'}, | |
125 | - {MODE_NOPRIVMSGS, 'n'}, | |
126 | - {MODE_PRIVATE, 'p'}, | |
127 | - {MODE_SECRET, 's'}, | |
128 | - {MODE_TOPICLIMIT, 't'}, | |
129 | - {MODE_NOCOLOR, 'c'}, | |
130 | - {MODE_FREEINVITE, 'g'}, | |
131 | - {MODE_OPMODERATE, 'z'}, | |
132 | - {MODE_EXLIMIT, 'L'}, | |
133 | - {MODE_PERMANENT, 'P'}, | |
134 | - {MODE_FREETARGET, 'F'}, | |
135 | - {MODE_DISFORWARD, 'Q'}, | |
136 | - {MODE_REGONLY, 'r'}, | |
137 | - {0, '\0'} | |
138 | -}; | |
139 | - | |
140 | /* channel_modes() | |
141 | * | |
142 | * inputs - pointer to channel | |
143 | @@ -1121,9 +1102,9 @@ | |
144 | *mbuf++ = '+'; | |
145 | *pbuf = '\0'; | |
146 | ||
147 | - for (i = 0; chmode_flags[i].mode; ++i) | |
148 | - if(chptr->mode.mode & chmode_flags[i].mode) | |
149 | - *mbuf++ = chmode_flags[i].letter; | |
150 | + for (i = 0; i < 256; i++) | |
151 | + if(chptr->mode.mode & chmode_flags[i]) | |
152 | + *mbuf++ = i; | |
153 | ||
154 | if(chptr->mode.limit) | |
155 | { | |
156 | diff -r e6b8fd0ebc1f src/chmode.c | |
157 | --- a/src/chmode.c Tue Apr 08 16:14:01 2008 +0400 | |
158 | +++ b/src/chmode.c Tue Apr 08 17:28:26 2008 +0400 | |
159 | @@ -42,6 +42,7 @@ | |
160 | #include "s_conf.h" /* ConfigFileEntry, ConfigChannel */ | |
161 | #include "s_newconf.h" | |
162 | #include "logger.h" | |
163 | +#include "chmode.h" | |
164 | ||
165 | /* bitmasks for error returns, so we send once per call */ | |
166 | #define SM_ERR_NOTS 0x00000001 /* No TS on channel */ | |
167 | @@ -67,6 +68,27 @@ | |
168 | static int mode_count; | |
169 | static int mode_limit; | |
170 | static int mask_pos; | |
171 | + | |
172 | +int chmode_flags[256]; | |
173 | +void | |
174 | +construct_noparam_modes(void) | |
175 | +{ | |
176 | + int i; | |
177 | + | |
178 | + for(i = 0; i < 256; i++) | |
179 | + { | |
180 | + if( (chmode_table[i].set_func == chm_simple) || | |
181 | + (chmode_table[i].set_func == chm_staff) || | |
182 | + (chmode_table[i].set_func == chm_regonly)) | |
183 | + { | |
184 | + chmode_flags[i] = chmode_table[i].mode_type; | |
185 | + } | |
186 | + else | |
187 | + { | |
188 | + chmode_flags[i] = 0; | |
189 | + } | |
190 | + } | |
191 | +} | |
192 | ||
193 | int | |
194 | get_channel_access(struct Client *source_p, struct membership *msptr) | |
195 | diff -r e6b8fd0ebc1f src/ircd.c | |
196 | --- a/src/ircd.c Tue Apr 08 16:14:01 2008 +0400 | |
197 | +++ b/src/ircd.c Tue Apr 08 17:28:26 2008 +0400 | |
198 | @@ -66,6 +66,7 @@ | |
199 | #include "patchlevel.h" | |
200 | #include "serno.h" | |
201 | #include "sslproc.h" | |
202 | +#include "chmode.h" | |
203 | ||
204 | /* /quote set variables */\r | |
205 | struct SetOptions GlobalSetOptions; | |
206 | @@ -594,6 +595,7 @@ | |
207 | init_client(); | |
208 | initUser(); | |
209 | init_hook(); | |
210 | + construct_noparam_modes(); | |
211 | init_channels(); | |
212 | initclass(); | |
213 | initwhowas(); |