Additions:
node_t *n, *link;
/* boundary case - all called on 1 memo */
if (mu->memos.count < 2)
memonum = 1;
LIST_FOREACH_SAFE(n, link, mu->memos.head)
{
/* Free to node pool, remove from chain */
free(n->data);
/* boundary case - all called on 1 memo */
if (mu->memos.count < 2)
memonum = 1;
LIST_FOREACH_SAFE(n, link, mu->memos.head)
{
/* Free to node pool, remove from chain */
free(n->data);
Deletions:
notice(memosvs.nick,origin,"all");
LIST_FOREACH(n, mu->memos.head)
{
notice(memosvs.nick,origin,"%d",i);
/* Create a temp node for link to next
temp = n->next;
memo = (mymemo_t *)n->data;
/* Free to node pool, remove from chain
free(memo);
/* Reassign n, free temp
n = temp;
node_free(temp);*/
Revision [305]
Edited on 2005-10-05 13:34:21 by KogAdmin [more updates... commented out del loop for unspecified behavior]Additions:
if (!strncasecmp("all",arg1,3))
notice(memosvs.nick,origin,"all");
notice(memosvs.nick,origin,"The specified memo doesn't exist.");
notice(memosvs.nick,origin,"%d",i);
/* Create a temp node for link to next
/* Free to node pool, remove from chain
/* Reassign n, free temp
node_free(temp);*/
notice(memosvs.nick, origin, "%d memo%s deleted.",delcount,
(delcount == 1) ? "":"s");
notice(memosvs.nick,origin,"all");
notice(memosvs.nick,origin,"The specified memo doesn't exist.");
notice(memosvs.nick,origin,"%d",i);
/* Create a temp node for link to next
/* Free to node pool, remove from chain
/* Reassign n, free temp
node_free(temp);*/
notice(memosvs.nick, origin, "%d memo%s deleted.",delcount,
(delcount == 1) ? "":"s");
Deletions:
notice(memosvs.nick,origin,
"Invalid arguments, please read the help entry");
/* Create a temp node for link to next */
/* Free to node pool, remove from chain */
/* Reassign n, free temp */
node_free(temp);
notice(memosvs.nick, origin, "%d memo%s deleted.",delcount, i ? "":"s");
Additions:
uint8_t i = 0, delcount = 0, memonum = 0;
mymemo_t *memo;
memo = (mymemo_t *)n->data;
free(memo);
notice(memosvs.nick, origin, "%d memo%s deleted.",delcount, i ? "":"s");
mymemo_t *memo;
memo = (mymemo_t *)n->data;
free(memo);
notice(memosvs.nick, origin, "%d memo%s deleted.",delcount, i ? "":"s");
Deletions:
notice(memosvs.nick, origin, "%d memo%s deleted.",i, i ? "s":"");
Additions:
/*
* Copyright (c) 2005 Atheme Development Group
* Rights to this code are as documented in doc/LICENSE.
*
* This file contains code for the Memoserv DELETE function
*
* $Id: list.c 2597 2005-10-05 06:37:06Z kog $
*/
#include "atheme.h"
DECLARE_MODULE_V1
(
"memoserv/delete", FALSE, _modinit, _moddeinit,
"$Id: list.c 2597 2005-10-05 06:37:06Z kog $",
"Atheme Development Group <http://www.atheme.org>"
);
static void ms_cmd_delete(char *origin);
command_t ms_delete = { "DELETE", "Deletes memos",
AC_NONE, ms_cmd_delete };
list_t *ms_cmdtree;
list_t *ms_helptree;
void _modinit(module_t *m)
{
ms_cmdtree = module_locate_symbol("memoserv/main", "ms_cmdtree");
command_add(&ms_delete, ms_cmdtree);
ms_helptree = module_locate_symbol("memoserv/main", "ms_helptree");
help_addentry(ms_helptree, "DELETE", "help/memoserv/delete", NULL);
}
void _moddeinit()
{
command_delete(&ms_delete, ms_cmdtree);
help_delentry(ms_helptree, "DELETE");
}
static void ms_cmd_delete(char *origin)
{
/* Misc structs etc */
user_t *u = user_find(origin);
myuser_t *mu = u->myuser;
node_t *n, *temp;
uint8_t i = 1, delcount = 0, memonum = 0;
/* We only take 1 arg, and we ignore all others */
char *arg1 = strtok(NULL, " ");
/* Does the arg exist? */
if (!arg1)
{
notice(memosvs.nick, origin,
"Insufficient parameters specified for \2DELETE\2.");
notice(memosvs.nick, origin, "Syntax: DELETE ALL|message id");
return;
}
/* Do we have any memos? */
if (!mu->memos.count)
{
notice(memosvs.nick,origin,"You have no memos to delete.");
return;
}
/* Check to see if int or str - strncasecmp for buffer issues*/
if (strncasecmp("ALL",arg1,3))
delcount = mu->memos.count;
else
{
delcount = 1;
memonum = atoi(arg1);
}
/* If int, does that index exist? And do we have something to delete? */
if ((memonum && (memonum > mu->memos.count)) || (!memonum && !delcount))
{
notice(memosvs.nick,origin,
"Invalid arguments, please read the help entry");
return;
}
/* Iterate through memos, doing deletion */
LIST_FOREACH(n, mu->memos.head)
{
if ((i == memonum) || delcount > 1)
{
/* Create a temp node for link to next */
temp = n->next;
/* Free to node pool, remove from chain */
node_del(n,&mu->memos);
node_free(n);
/* Reassign n, free temp */
n = temp;
node_free(temp);
}
i++;
}
notice(memosvs.nick, origin, "%d memo%s deleted.",i, i ? "s":"");
return;
}
* Copyright (c) 2005 Atheme Development Group
* Rights to this code are as documented in doc/LICENSE.
*
* This file contains code for the Memoserv DELETE function
*
* $Id: list.c 2597 2005-10-05 06:37:06Z kog $
*/
#include "atheme.h"
DECLARE_MODULE_V1
(
"memoserv/delete", FALSE, _modinit, _moddeinit,
"$Id: list.c 2597 2005-10-05 06:37:06Z kog $",
"Atheme Development Group <http://www.atheme.org>"
);
static void ms_cmd_delete(char *origin);
command_t ms_delete = { "DELETE", "Deletes memos",
AC_NONE, ms_cmd_delete };
list_t *ms_cmdtree;
list_t *ms_helptree;
void _modinit(module_t *m)
{
ms_cmdtree = module_locate_symbol("memoserv/main", "ms_cmdtree");
command_add(&ms_delete, ms_cmdtree);
ms_helptree = module_locate_symbol("memoserv/main", "ms_helptree");
help_addentry(ms_helptree, "DELETE", "help/memoserv/delete", NULL);
}
void _moddeinit()
{
command_delete(&ms_delete, ms_cmdtree);
help_delentry(ms_helptree, "DELETE");
}
static void ms_cmd_delete(char *origin)
{
/* Misc structs etc */
user_t *u = user_find(origin);
myuser_t *mu = u->myuser;
node_t *n, *temp;
uint8_t i = 1, delcount = 0, memonum = 0;
/* We only take 1 arg, and we ignore all others */
char *arg1 = strtok(NULL, " ");
/* Does the arg exist? */
if (!arg1)
{
notice(memosvs.nick, origin,
"Insufficient parameters specified for \2DELETE\2.");
notice(memosvs.nick, origin, "Syntax: DELETE ALL|message id");
return;
}
/* Do we have any memos? */
if (!mu->memos.count)
{
notice(memosvs.nick,origin,"You have no memos to delete.");
return;
}
/* Check to see if int or str - strncasecmp for buffer issues*/
if (strncasecmp("ALL",arg1,3))
delcount = mu->memos.count;
else
{
delcount = 1;
memonum = atoi(arg1);
}
/* If int, does that index exist? And do we have something to delete? */
if ((memonum && (memonum > mu->memos.count)) || (!memonum && !delcount))
{
notice(memosvs.nick,origin,
"Invalid arguments, please read the help entry");
return;
}
/* Iterate through memos, doing deletion */
LIST_FOREACH(n, mu->memos.head)
{
if ((i == memonum) || delcount > 1)
{
/* Create a temp node for link to next */
temp = n->next;
/* Free to node pool, remove from chain */
node_del(n,&mu->memos);
node_free(n);
/* Reassign n, free temp */
n = temp;
node_free(temp);
}
i++;
}
notice(memosvs.nick, origin, "%d memo%s deleted.",i, i ? "s":"");
return;
}