+/* send_join_error()
+ *
+ * input - client to send to, reason, channel name
+ * output - none
+ * side effects - error message sent to client
+ */
+static void
+send_join_error(struct Client *source_p, int numeric, const char *name)
+{
+ /* This stuff is necessary because the form_str macro only
+ * accepts constants.
+ */
+ switch (numeric)
+ {
+#define NORMAL_NUMERIC(i) \
+ case i: \
+ sendto_one(source_p, form_str(i), \
+ me.name, source_p->name, name); \
+ break
+
+ NORMAL_NUMERIC(ERR_BANNEDFROMCHAN);
+ NORMAL_NUMERIC(ERR_INVITEONLYCHAN);
+ NORMAL_NUMERIC(ERR_BADCHANNELKEY);
+ NORMAL_NUMERIC(ERR_CHANNELISFULL);
+ NORMAL_NUMERIC(ERR_NEEDREGGEDNICK);
+ NORMAL_NUMERIC(ERR_THROTTLE);
+
+ default:
+ sendto_one_numeric(source_p, numeric,
+ "%s :Cannot join channel", name);
+ break;
+ }
+}
+