]> arthur.barton.de Git - ngircd-alex.git/blobdiff - src/ngircd/lists.c
Limit channel invite and ban lists to 50 entries
[ngircd-alex.git] / src / ngircd / lists.c
index 63c16b0da1ed268af0a7f42bd6e49fe22a13da1a..c082f1c4c0b767713608355004cb6b41ae3fa14a 100644 (file)
@@ -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 : "";
 }
 
 /**
@@ -126,8 +126,15 @@ Lists_Add(struct list_head *h, const char *Mask, time_t ValidUntil,
        assert(h != NULL);
        assert(Mask != NULL);
 
-       if (Lists_CheckDupeMask(h, Mask))
+       e = Lists_CheckDupeMask(h, Mask);
+       if (e) {
+               e->valid_until = ValidUntil;
+               if (Reason) {
+                       free(e->reason);
+                       e->reason = strdup(Reason);
+               }
                return true;
+       }
 
        e = Lists_GetFirst(h);
 
@@ -240,17 +247,17 @@ Lists_Free(struct list_head *head)
  * @param Mask IRC mask to test.
  * @return true if mask is already stored in the list, false otherwise.
  */
-GLOBAL bool
+GLOBAL struct list_elem *
 Lists_CheckDupeMask(const struct list_head *h, const char *Mask )
 {
        struct list_elem *e;
        e = h->first;
        while (e) {
                if (strcasecmp(e->mask, Mask) == 0)
-                       return true;
+                       return e;
                e = e->next;
        }
-       return false;
+       return NULL;
 }
 
 /**
@@ -316,13 +323,11 @@ bool
 Lists_Check( 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;
@@ -380,4 +385,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- */