#include "../chanserv.h"
#include "../../core/nsmalloc.h"
-#include <stdlib.h>
-
-#define ALLOCUNIT 100
-
-regchan *csfreechans;
-reguser *csfreeusers;
-regchanuser *csfreechanusers;
-regban *csfreeregbans;
-activeuser *csfreeactiveusers;
-maildomain *csfreemaildomains;
-
-void *csmallocs;
-
-void chanservallocinit() {
- csfreechans=NULL;
- csfreeusers=NULL;
- csfreechanusers=NULL;
- csfreeregbans=NULL;
- csfreeactiveusers=NULL;
-}
-
regchan *getregchan() {
- int i;
- regchan *rcp;
-
- if (csfreechans==NULL) {
- csfreechans=(regchan *)nsmalloc(POOL_CHANSERVDB,ALLOCUNIT*sizeof(regchan));
- for (i=0;i<(ALLOCUNIT-1);i++) {
- csfreechans[i].index=(chanindex *)&(csfreechans[i+1]);
- }
- csfreechans[ALLOCUNIT-1].index=NULL;
- }
-
- rcp=csfreechans;
- csfreechans=(regchan *)rcp->index;
+ regchan *rcp = nsmalloc(POOL_CHANSERVDB, sizeof(regchan));
+
+ if (!rcp)
+ return NULL;
tagregchan(rcp);
void freeregchan(regchan *rcp) {
verifyregchan(rcp);
- rcp->index=(chanindex *)csfreechans;
- csfreechans=rcp;
+ nsfree(POOL_CHANSERVDB, rcp);
}
reguser *getreguser() {
- int i;
- reguser *rup;
-
- if (csfreeusers==NULL) {
- csfreeusers=(reguser *)nsmalloc(POOL_CHANSERVDB,ALLOCUNIT*sizeof(reguser));
- for (i=0;i<(ALLOCUNIT-1);i++) {
- csfreeusers[i].nextbyname=&(csfreeusers[i+1]);
- }
- csfreeusers[ALLOCUNIT-1].nextbyname=NULL;
- }
-
- rup=csfreeusers;
- csfreeusers=rup->nextbyname;
+ reguser *rup = nsmalloc(POOL_CHANSERVDB, sizeof(reguser));
+
+ if (!rup)
+ return NULL;
tagreguser(rup);
void freereguser(reguser *rup) {
verifyreguser(rup);
- rup->nextbyname=csfreeusers;
- csfreeusers=rup;
+ nsfree(POOL_CHANSERVDB, rup);
}
regchanuser *getregchanuser() {
- int i;
- regchanuser *rcup;
-
- if (csfreechanusers==NULL) {
- csfreechanusers=(regchanuser *)nsmalloc(POOL_CHANSERVDB,ALLOCUNIT*sizeof(regchanuser));
- for (i=0;i<(ALLOCUNIT-1);i++) {
- csfreechanusers[i].nextbyuser=&(csfreechanusers[i+1]);
- }
- csfreechanusers[ALLOCUNIT-1].nextbyuser=NULL;
- }
+ regchanuser *rcup = nsmalloc(POOL_CHANSERVDB, sizeof(regchanuser));
- rcup=csfreechanusers;
- csfreechanusers=rcup->nextbyuser;
+ if (!rcup)
+ return NULL;
tagregchanuser(rcup);
void freeregchanuser(regchanuser *rcup) {
verifyregchanuser(rcup);
- rcup->nextbyuser=csfreechanusers;
- csfreechanusers=rcup;
+ nsfree(POOL_CHANSERVDB, rcup);
}
regban *getregban() {
- int i;
- regban *rbp;
-
- if (csfreeregbans==NULL) {
- csfreeregbans=(regban *)nsmalloc(POOL_CHANSERVDB,ALLOCUNIT*sizeof(regban));
- for (i=0;i<(ALLOCUNIT-1);i++) {
- csfreeregbans[i].next=&(csfreeregbans[i+1]);
- }
- csfreeregbans[ALLOCUNIT-1].next=NULL;
- }
-
- rbp=csfreeregbans;
- csfreeregbans=rbp->next;
+ regban *rbp = nsmalloc(POOL_CHANSERVDB, sizeof(regban));
+
+ if (!rbp)
+ return NULL;
tagregchanban(rbp);
void freeregban(regban *rbp) {
verifyregchanban(rbp);
- rbp->next=csfreeregbans;
- csfreeregbans=rbp;
+ nsfree(POOL_CHANSERVDB, rbp);
}
activeuser *getactiveuser() {
- int i;
- activeuser *aup;
-
- if (csfreeactiveusers==NULL) {
- csfreeactiveusers=(activeuser *)nsmalloc(POOL_CHANSERVDB,ALLOCUNIT*sizeof(activeuser));
- for (i=0;i<(ALLOCUNIT-1);i++) {
- csfreeactiveusers[i].next=&(csfreeactiveusers[i+1]);
- }
- csfreeactiveusers[ALLOCUNIT-1].next=NULL;
- }
-
- aup=csfreeactiveusers;
- csfreeactiveusers=aup->next;
-
+ activeuser *aup = nsmalloc(POOL_CHANSERVDB, sizeof(activeuser));
+
+ if (!aup)
+ return NULL;
+
tagactiveuser(aup);
aup->authattempts=0;
void freeactiveuser(activeuser *aup) {
verifyactiveuser(aup);
- aup->next=csfreeactiveusers;
- csfreeactiveusers=aup;
+ nsfree(POOL_CHANSERVDB, aup);
}
maildomain *getmaildomain() {
- int i;
- maildomain *mdp;
-
- if (csfreemaildomains==NULL) {
- csfreemaildomains=(maildomain *)nsmalloc(POOL_CHANSERVDB,ALLOCUNIT*sizeof(maildomain));
- for (i=0;i<(ALLOCUNIT-1);i++) {
- csfreemaildomains[i].nextbyname=&(csfreemaildomains[i+1]);
- }
- csfreemaildomains[ALLOCUNIT-1].nextbyname=NULL;
- }
+ maildomain *mdp = nsmalloc(POOL_CHANSERVDB, sizeof(maildomain));
- mdp=csfreemaildomains;
- csfreemaildomains=mdp->nextbyname;
+ if (!mdp)
+ return NULL;
tagmaildomain(mdp);
void freemaildomain(maildomain *mdp) {
verifymaildomain(mdp);
- mdp->nextbyname=csfreemaildomains;
- csfreemaildomains=mdp;
+ nsfree(POOL_CHANSERVDB, mdp);
}
maillock *getmaillock() {
- /* we don't create too many of these */
- maillock *mlp = nsmalloc(POOL_CHANSERVDB,sizeof(maillock));
+ maillock *mlp = nsmalloc(POOL_CHANSERVDB, sizeof(maillock));
+
+ if (!mlp)
+ return NULL;
+
tagmaillock(mlp);
return mlp;
freesstring(mlp->pattern);
freesstring(mlp->reason);
- nsfree(POOL_CHANSERVDB,mlp);
+ nsfree(POOL_CHANSERVDB, mlp);
}