1
0
mirror of https://github.com/osmarks/ngircd.git synced 2024-12-12 09:50:29 +00:00

Configuration: get rid of Conf_Oper_Count and Conf_Channel_Count

Count elements dynamically when needed.
This commit is contained in:
Alexander Barton 2011-08-27 17:03:30 +02:00
parent ee21490887
commit 0a85c58878

View File

@ -55,8 +55,6 @@ static bool Use_Log = true, Using_MotdFile = true;
static CONF_SERVER New_Server; static CONF_SERVER New_Server;
static int New_Server_Idx; static int New_Server_Idx;
static size_t Conf_Oper_Count;
static size_t Conf_Channel_Count;
static char Conf_MotdFile[FNAME_LEN]; static char Conf_MotdFile[FNAME_LEN];
static void Set_Defaults PARAMS(( bool InitServers )); static void Set_Defaults PARAMS(( bool InitServers ));
@ -265,18 +263,18 @@ static void
opers_puts(void) opers_puts(void)
{ {
struct Conf_Oper *op; struct Conf_Oper *op;
size_t len; size_t count, i;
len = array_length(&Conf_Opers, sizeof(*op)); count = array_length(&Conf_Opers, sizeof(*op));
op = array_start(&Conf_Opers); op = array_start(&Conf_Opers);
while (len--) { for (i = 0; i < count; i++, op++) {
assert(op->name[0]); if (!op->name[0])
continue;
puts("[OPERATOR]"); puts("[OPERATOR]");
printf(" Name = %s\n", op->name); printf(" Name = %s\n", op->name);
printf(" Password = %s\n", op->pwd); printf(" Password = %s\n", op->pwd);
printf(" Mask = %s\n\n", op->mask ? op->mask : ""); printf(" Mask = %s\n\n", op->mask ? op->mask : "");
op++;
} }
} }
@ -709,10 +707,6 @@ Set_Defaults(bool InitServers)
#endif #endif
#endif #endif
/* Initialize IRC operators and channels */
Conf_Oper_Count = 0;
Conf_Channel_Count = 0;
/* Initialize server configuration structures */ /* Initialize server configuration structures */
if (InitServers) { if (InitServers) {
for (i = 0; i < MAX_SERVERS; for (i = 0; i < MAX_SERVERS;
@ -787,6 +781,7 @@ Read_Config( bool ngircd_starting )
char section[LINE_LEN], str[LINE_LEN], *var, *arg, *ptr; char section[LINE_LEN], str[LINE_LEN], *var, *arg, *ptr;
const UINT16 defaultport = 6667; const UINT16 defaultport = 6667;
int line, i, n; int line, i, n;
size_t count;
FILE *fd; FILE *fd;
/* Open configuration file */ /* Open configuration file */
@ -887,12 +882,30 @@ Read_Config( bool ngircd_starting )
else New_Server_Idx = i; else New_Server_Idx = i;
continue; continue;
} }
if (strcasecmp(section, "[CHANNEL]") == 0) { if (strcasecmp(section, "[CHANNEL]") == 0) {
Conf_Channel_Count++; count = array_length(&Conf_Channels,
sizeof(struct Conf_Channel));
if (!array_alloc(&Conf_Channels,
sizeof(struct Conf_Channel),
count)) {
Config_Error(LOG_ERR,
"Could not allocate memory for new operator (line %d)",
line);
}
continue; continue;
} }
if (strcasecmp(section, "[OPERATOR]") == 0) { if (strcasecmp(section, "[OPERATOR]") == 0) {
Conf_Oper_Count++; count = array_length(&Conf_Opers,
sizeof(struct Conf_Oper));
if (!array_alloc(&Conf_Opers,
sizeof(struct Conf_Oper),
count)) {
Config_Error(LOG_ERR,
"Could not allocate memory for new channel (line &d)",
line);
}
continue; continue;
} }
@ -1584,13 +1597,11 @@ Handle_OPERATOR( int Line, char *Var, char *Arg )
assert( Line > 0 ); assert( Line > 0 );
assert( Var != NULL ); assert( Var != NULL );
assert( Arg != NULL ); assert( Arg != NULL );
assert( Conf_Oper_Count > 0 );
op = array_alloc(&Conf_Opers, sizeof(*op), Conf_Oper_Count - 1); op = array_get(&Conf_Opers, sizeof(*op),
if (!op) { array_length(&Conf_Opers, sizeof(*op)) - 1);
Config_Error(LOG_ERR, "Could not allocate memory for operator (%d:%s = %s)", Line, Var, Arg); if (!op)
return; return;
}
if (strcasecmp(Var, "Name") == 0) { if (strcasecmp(Var, "Name") == 0) {
/* Name of IRC operator */ /* Name of IRC operator */
@ -1756,21 +1767,17 @@ static void
Handle_CHANNEL(int Line, char *Var, char *Arg) Handle_CHANNEL(int Line, char *Var, char *Arg)
{ {
size_t len; size_t len;
size_t chancount;
struct Conf_Channel *chan; struct Conf_Channel *chan;
assert( Line > 0 ); assert( Line > 0 );
assert( Var != NULL ); assert( Var != NULL );
assert( Arg != NULL ); assert( Arg != NULL );
assert(Conf_Channel_Count > 0);
chancount = Conf_Channel_Count - 1; chan = array_get(&Conf_Channels, sizeof(*chan),
array_length(&Conf_Channels, sizeof(*chan)) - 1);
chan = array_alloc(&Conf_Channels, sizeof(*chan), chancount); if (!chan)
if (!chan) {
Config_Error(LOG_ERR, "Could not allocate memory for predefined channel (%d:%s = %s)", Line, Var, Arg);
return; return;
}
if (strcasecmp(Var, "Name") == 0) { if (strcasecmp(Var, "Name") == 0) {
if (!Handle_Channelname(chan, Arg)) if (!Handle_Channelname(chan, Arg))
Config_Error_TooLong(Line, Var); Config_Error_TooLong(Line, Var);
@ -1917,8 +1924,10 @@ Validate_Config(bool Configtest, bool Rehash)
} }
} }
Log(LOG_DEBUG, Log(LOG_DEBUG,
"Configuration: Operators=%d, Servers=%d[%d], Channels=%d", "Configuration: Operators=%ld, Servers=%d[%d], Channels=%ld",
Conf_Oper_Count, servers, servers_once, Conf_Channel_Count); array_length(&Conf_Opers, sizeof(struct Conf_Oper)),
servers, servers_once,
array_length(&Conf_Channels, sizeof(struct Conf_Channel)));
#endif #endif
return config_valid; return config_valid;