#include "numeric.h"
#include "send.h"
#include "packet.h"
+#include "s_assert.h"
static const char alias_desc[] = "Provides the system for services aliases";
rb_dictionary_iter iter;
struct alias_entry *alias;
- s_assert(rb_dlink_list_length(alias_messages) > 0);
+ s_assert(rb_dlink_list_length(&alias_messages) == 0);
RB_DICTIONARY_FOREACH(alias, &iter, alias_dict)
{
- struct Message *message = rb_malloc(sizeof(struct Message));
+ struct Message *message = rb_malloc(sizeof(*message) + strlen(alias->name) + 1);
+ char *cmd = (char*)message + sizeof(*message);
- message->cmd = alias->name;
+ /* copy the alias name as it will be freed early on a rehash */
+ strcpy(cmd, alias->name);
+ message->cmd = cmd;
memcpy(message->handlers, alias_msgtab, sizeof(alias_msgtab));
mod_add_cmd(message);
}
static int
-reload_aliases(hook_data *data __unused)
+reload_aliases(hook_data *data)
{
destroy_aliases(); /* Clear old aliases */
create_aliases();
if(aptr == NULL)
{
- if(IsPerson(source_p))
- sendto_one(source_p, form_str(ERR_UNKNOWNCOMMAND),
- me.name, source_p->name, msgbuf->cmd);
+ /* This shouldn't happen... */
+ if(IsPerson(client_p))
+ sendto_one(client_p, form_str(ERR_UNKNOWNCOMMAND),
+ me.name, client_p->name, msgbuf->cmd);
return;
}
- else if(parc < 2)
- {
- sendto_one(client_p, form_str(ERR_NEEDMOREPARAMS),
- me.name,
- EmptyString(client_p->name) ? "*" : client_p->name,
- msgbuf->cmd);
- return;
- }
- if(!IsFloodDone(source_p) && source_p->localClient->receiveM > 20)
- flood_endgrace(source_p);
+ if(!IsFloodDone(client_p) && client_p->localClient->receiveM > 20)
+ flood_endgrace(client_p);
p = strchr(aptr->target, '@');
if(p != NULL)
if(target_p == NULL)
{
- sendto_one_numeric(source_p, ERR_SERVICESDOWN, form_str(ERR_SERVICESDOWN), aptr->target);
+ sendto_one_numeric(client_p, ERR_SERVICESDOWN, form_str(ERR_SERVICESDOWN), aptr->target);
return;
}
- if(*parv[1] == '\0')
+ msgbuf_reconstruct_tail(msgbuf, 1);
+ if(EmptyString(parv[1]))
{
- sendto_one(source_p, form_str(ERR_NOTEXTTOSEND), me.name, source_p->name);
+ sendto_one(client_p, form_str(ERR_NOTEXTTOSEND), me.name, target_p->name);
return;
}
- /* increment the hitcounter on this alias */
- aptr->hits++;
-
sendto_one(target_p, ":%s PRIVMSG %s :%s",
- get_id(source_p, target_p),
+ get_id(client_p, target_p),
p != NULL ? aptr->target : get_id(target_p, target_p),
parv[1]);
}