* like MODE +o <nick>, KICK #chan <nick>, KILL <nick> etc), there is no
* real important reason for a nick history anymore.
* Nevertheless, there are two reason why we might want to keep it:
- * @li The /WHOWAS command, which is often useful to catch harrassing
+ * @li The /WHOWAS command, which is often useful to catch harassing
* users or abusers in general.
* @li Clients still use the normal nicks in the client-server protocol,
* and it might be considered a nice feature that here we still have
* point to the start of the 'hash list': all entries with the same hashv.
* We'll have to search this list to find the entry with the correct <nick>.
* Once we found the correct whowas entry, we have a pointer to the
- * corresponding client - if still online - for nich chasing purposes.
+ * corresponding client - if still online - for nick chasing purposes.
* Note that the same nick can occur multiple times in the whowas history,
* each of these having the same hash value of course. While a /WHOWAS on
* just a nick will return all entries, nick chasing will only find the
wwList.ww_alloc--;
}
-/** Initialize a whowas record.
- * @param[in,out] ww Whowas record to initialize.
- * @return The pointer \a ww.
- */
-static struct Whowas *
-whowas_init(struct Whowas *ww)
-{
- if (ww)
- memset(ww, 0, sizeof(*ww));
- return ww;
-}
-
/** Return a fresh Whowas record.
* If the total number of records is smaller than determined by
* FEAT_NICKNAMEHISTORYLENGTH, allocate a new one. Otherwise,
static struct Whowas *
whowas_alloc(void)
{
- if (wwList.ww_alloc >= feature_int(FEAT_NICKNAMEHISTORYLENGTH))
- return whowas_init(whowas_clean(wwList.ww_tail));
+ struct Whowas *ww;
- wwList.ww_alloc++; /* going to allocate a new one... */
- return whowas_init((struct Whowas *) MyMalloc(sizeof(struct Whowas)));
+ if (wwList.ww_alloc >= feature_int(FEAT_NICKNAMEHISTORYLENGTH)) {
+ /* reclaim the oldest whowas entry */
+ ww = whowas_clean(wwList.ww_tail);
+ } else {
+ /* allocate a new one */
+ wwList.ww_alloc++;
+ ww = (struct Whowas *) MyMalloc(sizeof(struct Whowas));
+ }
+
+ assert(ww != NULL);
+ memset(ww, 0, sizeof(*ww));
+ return ww;
}
/** If necessary, trim the whowas list.