/************************************************************************
* IRC - Internet Relay Chat, src/clientlist.c
* Copyright (C) 2003 Lucas Madar
*/
/* $Id: clientlist.c,v 1.3 2005/07/05 03:17:53 sheik Exp $ */
#include "struct.h"
#include "common.h"
#include "sys.h"
#include "h.h"
#include "numeric.h"
#include "blalloc.h"
#include "memcount.h"
DLink *server_list = NULL;
DLink *oper_list = NULL;
/* Clients currently doing a /list */
DLink *listing_clients = NULL;
DLink *recvq_clients = NULL;
DLink *add_to_list(DLink **list, void *ptr)
{
DLink *lp = make_dlink();
lp->value.cp = (char *) ptr;
lp->next = *list;
lp->prev = NULL;
if(lp->next)
lp->next->prev = lp;
*list = lp;
return lp;
}
static inline void remove_dlink_list(DLink **list, DLink *link)
{
if(link->next)
link->next->prev = link->prev;
if(link->prev)
link->prev->next = link->next;
else
{
*list = link->next;
if(*list)
(*list)->prev = NULL;
}
free_dlink(link);
}
void remove_from_list(DLink **list, void *ptr, DLink *link)
{
DLink *lp;
if(link)
{
remove_dlink_list(list, link);
return;
}
for(lp = *list; lp; lp = lp->next)
{
if(lp->value.cp == (char *) ptr)
{
remove_dlink_list(list, lp);
return;
}
}
sendto_realops("remove_from_list(%x, %x) failed!!", (int) list, (int) ptr);
}
u_long
memcount_clientlist(MCclientlist *mc)
{
mc->file = __FILE__;
mc->e_server_dlinks = mc_dlinks(server_list);
mc->e_oper_dlinks = mc_dlinks(oper_list);
mc->e_recvq_dlinks = mc_dlinks(recvq_clients);
/* listing_clients is handled in channel.c */
return 0;
}
syntax highlighted by Code2HTML, v. 0.9.1