ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/svn/ircd-hybrid/branches/8.2.x/modules/core/m_join.c
(Generate patch)

Comparing ircd-hybrid/branches/8.2.x/modules/core/m_join.c (file contents):
Revision 9468 by michael, Wed Jul 1 15:12:58 2020 UTC vs.
Revision 9597 by michael, Sat Sep 5 10:09:36 2020 UTC

# Line 40 | Line 40
40   #include "modules.h"
41  
42  
43 < static void set_final_mode(const struct Mode *, const struct Mode *, char *, char *);
43 > /* set_final_mode
44 > *
45 > * inputs       - channel mode
46 > *              - old channel mode
47 > * output       - NONE
48 > * side effects - walk through all the channel modes turning off modes
49 > *                that were on in oldmode but aren't on in mode.
50 > *                Then walk through turning on modes that are on in mode
51 > *                but were not set in oldmode.
52 > */
53 > static void
54 > set_final_mode(const struct Mode *mode, const struct Mode *oldmode, char *mbuf, char *pbuf)
55 > {
56 >  int what = MODE_QUERY;
57 >
58 >  for (const struct chan_mode *tab = cmode_tab; tab->letter; ++tab)
59 >  {
60 >    if (tab->mode && (tab->mode & mode->mode) && !(tab->mode & oldmode->mode))
61 >    {
62 >      if (what != MODE_ADD)
63 >      {
64 >        *mbuf++ = '+';
65 >        what = MODE_ADD;
66 >      }
67 >
68 >      *mbuf++ = tab->letter;
69 >    }
70 >  }
71 >
72 >  for (const struct chan_mode *tab = cmode_tab; tab->letter; ++tab)
73 >  {
74 >    if (tab->mode && (tab->mode & oldmode->mode) && !(tab->mode & mode->mode))
75 >    {
76 >      if (what != MODE_DEL)
77 >      {
78 >        *mbuf++ = '-';
79 >        what = MODE_DEL;
80 >      }
81 >
82 >      *mbuf++ = tab->letter;
83 >    }
84 >  }
85 >
86 >  if (oldmode->limit && mode->limit == 0)
87 >  {
88 >    if (what != MODE_DEL)
89 >    {
90 >      *mbuf++ = '-';
91 >      what = MODE_DEL;
92 >    }
93 >
94 >    *mbuf++ = 'l';
95 >  }
96 >
97 >  if (oldmode->key[0] && mode->key[0] == '\0')
98 >  {
99 >    if (what != MODE_DEL)
100 >    {
101 >      *mbuf++ = '-';
102 >      what = MODE_DEL;
103 >    }
104 >
105 >    *mbuf++ = 'k';
106 >    pbuf += sprintf(pbuf, "%s ", oldmode->key);
107 >  }
108 >
109 >  if (mode->limit && oldmode->limit != mode->limit)
110 >  {
111 >    if (what != MODE_ADD)
112 >    {
113 >      *mbuf++ = '+';
114 >      what = MODE_ADD;
115 >    }
116  
117 +    *mbuf++ = 'l';
118 +    pbuf += sprintf(pbuf, "%u ", mode->limit);
119 +  }
120 +
121 +  if (mode->key[0] && strcmp(oldmode->key, mode->key))
122 +  {
123 +    if (what != MODE_ADD)
124 +    {
125 +      *mbuf++ = '+';
126 +      what = MODE_ADD;
127 +    }
128 +
129 +    *mbuf++ = 'k';
130 +    pbuf += sprintf(pbuf, "%s ", mode->key);
131 +  }
132 +
133 +  *mbuf = '\0';
134 + }
135  
136   /*! \brief JOIN command handler
137   *
# Line 195 | Line 285 | ms_join(struct Client *source_p, int par
285                  source_p->id, channel->creation_time, channel->name);
286   }
287  
198 /* set_final_mode
199 *
200 * inputs       - channel mode
201 *              - old channel mode
202 * output       - NONE
203 * side effects - walk through all the channel modes turning off modes
204 *                that were on in oldmode but aren't on in mode.
205 *                Then walk through turning on modes that are on in mode
206 *                but were not set in oldmode.
207 */
208 static void
209 set_final_mode(const struct Mode *mode, const struct Mode *oldmode, char *mbuf, char *pbuf)
210 {
211  int what = MODE_QUERY;
212
213  for (const struct chan_mode *tab = cmode_tab; tab->letter; ++tab)
214  {
215    if (tab->mode && (tab->mode & mode->mode) && !(tab->mode & oldmode->mode))
216    {
217      if (what != MODE_ADD)
218      {
219        *mbuf++ = '+';
220        what = MODE_ADD;
221      }
222
223      *mbuf++ = tab->letter;
224    }
225  }
226
227  for (const struct chan_mode *tab = cmode_tab; tab->letter; ++tab)
228  {
229    if (tab->mode && (tab->mode & oldmode->mode) && !(tab->mode & mode->mode))
230    {
231      if (what != MODE_DEL)
232      {
233        *mbuf++ = '-';
234        what = MODE_DEL;
235      }
236
237      *mbuf++ = tab->letter;
238    }
239  }
240
241  if (oldmode->limit && mode->limit == 0)
242  {
243    if (what != MODE_DEL)
244    {
245      *mbuf++ = '-';
246      what = MODE_DEL;
247    }
248
249    *mbuf++ = 'l';
250  }
251
252  if (oldmode->key[0] && mode->key[0] == '\0')
253  {
254    if (what != MODE_DEL)
255    {
256      *mbuf++ = '-';
257      what = MODE_DEL;
258    }
259
260    *mbuf++ = 'k';
261    pbuf += sprintf(pbuf, "%s ", oldmode->key);
262  }
263
264  if (mode->limit && oldmode->limit != mode->limit)
265  {
266    if (what != MODE_ADD)
267    {
268      *mbuf++ = '+';
269      what = MODE_ADD;
270    }
271
272    *mbuf++ = 'l';
273    pbuf += sprintf(pbuf, "%u ", mode->limit);
274  }
275
276  if (mode->key[0] && strcmp(oldmode->key, mode->key))
277  {
278    if (what != MODE_ADD)
279    {
280      *mbuf++ = '+';
281      what = MODE_ADD;
282    }
283
284    *mbuf++ = 'k';
285    pbuf += sprintf(pbuf, "%s ", mode->key);
286  }
287
288  *mbuf = '\0';
289 }
290
288   static struct Message join_msgtab =
289   {
290    .cmd = "JOIN",

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines