X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fngircd%2Flists.c;h=5c6c52c4c9b2c9f15a4bdddcd05bef422125b929;hb=e0da56fc7b1dae4e21dfda7e0ac8ad7594135986;hp=27a51dca1f3a3787932a53283b4308bce8fc3e25;hpb=15fec92ed75c3de0b32c40d005e93e3f61aef77e;p=ngircd-alex.git diff --git a/src/ngircd/lists.c b/src/ngircd/lists.c index 27a51dca..5c6c52c4 100644 --- a/src/ngircd/lists.c +++ b/src/ngircd/lists.c @@ -60,13 +60,13 @@ Lists_GetMask(const struct list_elem *e) * Get optional "reason" text stored in list element. * * @param list_elem List element. - * @return Pointer to "reason" text or NULL. + * @return Pointer to "reason" text or empty string (""). */ GLOBAL const char * Lists_GetReason(const struct list_elem *e) { assert(e != NULL); - return e->reason; + return e->reason ? e->reason : ""; } /** @@ -129,14 +129,10 @@ Lists_Add(struct list_head *h, const char *Mask, time_t ValidUntil, e = Lists_CheckDupeMask(h, Mask); if (e) { e->valid_until = ValidUntil; - if (e->reason) + if (Reason) { free(e->reason); - e->reason = malloc(strlen(Reason) + 1); - if (e->reason) - strlcpy(e->reason, Reason, strlen(Reason) + 1); - else - Log(LOG_EMERG, - "Can't allocate memory for new list reason text!"); + e->reason = strdup(Reason); + } return true; } @@ -151,10 +147,8 @@ Lists_Add(struct list_head *h, const char *Mask, time_t ValidUntil, strlcpy(newelem->mask, Mask, sizeof(newelem->mask)); if (Reason) { - newelem->reason = malloc(strlen(Reason) + 1); - if (newelem->reason) - strlcpy(newelem->reason, Reason, strlen(Reason) + 1); - else + newelem->reason = strdup(Reason); + if (!newelem->reason) Log(LOG_EMERG, "Can't allocate memory for new list reason text!"); } @@ -324,16 +318,27 @@ Lists_MakeMask(const char *Pattern) * @return true if client is listed, false if not. */ bool -Lists_Check( struct list_head *h, CLIENT *Client) +Lists_Check(struct list_head *h, CLIENT *Client) +{ + return Lists_CheckReason(h, Client) != NULL; +} + +/** + * Check if a client is listed in a list and return the "reason". + * + * @param h List head. + * @param Client Client to check. + * @return true if client is listed, false if not. + */ +char * +Lists_CheckReason(struct list_head *h, CLIENT *Client) { struct list_elem *e, *last, *next; - time_t now; assert(h != NULL); e = h->first; last = NULL; - now = time(NULL); while (e) { next = e->next; @@ -344,13 +349,13 @@ Lists_Check( struct list_head *h, CLIENT *Client) e->mask); Lists_Unlink(h, last, e); } - return true; + return e->reason ? e->reason : ""; } last = e; e = next; } - return false; + return NULL; } /** @@ -391,4 +396,26 @@ Lists_Expire(struct list_head *h, const char *ListName) } } +/** + * Return the number of entries of a list. + * + * @param h List head. + * @return Number of items. + */ +GLOBAL unsigned long +Lists_Count(struct list_head *h) +{ + struct list_elem *e; + unsigned long count = 0; + + assert(h != NULL); + + e = h->first; + while (e) { + count++; + e = e->next; + } + return count; +} + /* -eof- */