static void Generate_MyToken PARAMS(( CLIENT *Client ));
static void Adjust_Counters PARAMS(( CLIENT *Client ));
+static void Free_Client PARAMS(( CLIENT **Client ));
+
static CLIENT *Init_New_Client PARAMS((CONN_ID Idx, CLIENT *Introducer,
CLIENT *TopServer, int Type, const char *ID,
const char *User, const char *Hostname, const char *Info,
cnt = 0;
c = My_Clients;
- while( c )
- {
+ while(c) {
cnt++;
next = (CLIENT *)c->next;
- if (c->account_name)
- free(c->account_name);
- if (c->cloaked)
- free(c->cloaked);
- if (c->ipa_text)
- free(c->ipa_text);
- free( c );
+ Free_Client(&c);
c = next;
}
- if( cnt ) Log( LOG_INFO, "Freed %d client structure%s.", cnt, cnt == 1 ? "" : "s" );
+ if (cnt)
+ Log(LOG_INFO, "Freed %d client structure%s.",
+ cnt, cnt == 1 ? "" : "s");
} /* Client_Exit */
Generate_MyToken(client);
if (Client_HasMode(client, 'a'))
- strlcpy(client->away, DEFAULT_AWAY_MSG, sizeof(client->away));
+ client->away = strndup(DEFAULT_AWAY_MSG, CLIENT_AWAY_LEN - 1);
client->next = (POINTER *)My_Clients;
My_Clients = client;
}
}
- if (c->account_name)
- free(c->account_name);
- if (c->cloaked)
- free(c->cloaked);
- if (c->ipa_text)
- free(c->ipa_text);
- free( c );
+ Free_Client(&c);
break;
}
last = c;
assert( Client != NULL );
assert( Txt != NULL );
- strlcpy( Client->away, Txt, sizeof( Client->away ));
+ if (Client->away)
+ free(Client->away);
+
+ Client->away = strndup(Txt, CLIENT_AWAY_LEN - 1);
+
LogDebug("%s \"%s\" is away: %s", Client_TypeText(Client),
Client_Mask(Client), Txt);
} /* Client_SetAway */
} /* Client_SetIntroducer */
-GLOBAL void
-Client_SetOperByMe( CLIENT *Client, bool OperByMe )
-{
- assert( Client != NULL );
- Client->oper_by_me = OperByMe;
-} /* Client_SetOperByMe */
-
-
GLOBAL bool
Client_ModeAdd( CLIENT *Client, char Mode )
{
} /* Client_Flags */
-GLOBAL bool
-Client_OperByMe( CLIENT *Client )
-{
- assert( Client != NULL );
- return Client->oper_by_me;
-} /* Client_OperByMe */
-
-
GLOBAL int
Client_Hops( CLIENT *Client )
{
} /* MyCount */
+/**
+ * Allocate and initialize new CLIENT strcuture.
+ *
+ * @return Pointer to CLIENT structure or NULL on error.
+ */
static CLIENT *
New_Client_Struct( void )
{
c->type = CLIENT_UNKNOWN;
c->conn_id = NONE;
- c->oper_by_me = false;
c->hops = -1;
c->token = -1;
c->mytoken = -1;
return c;
-} /* New_Client */
+}
+/**
+ * Free a CLIENT structure and its member variables.
+ */
+static void
+Free_Client(CLIENT **Client)
+{
+ assert(Client != NULL);
+ assert(*Client != NULL);
+
+ if ((*Client)->account_name)
+ free((*Client)->account_name);
+ if ((*Client)->away)
+ free((*Client)->away);
+ if ((*Client)->cloaked)
+ free((*Client)->cloaked);
+ if ((*Client)->ipa_text)
+ free((*Client)->ipa_text);
+
+ free(*Client);
+ *Client = NULL;
+}
static void
Generate_MyToken( CLIENT *Client )