]> arthur.barton.de Git - ngircd-alex.git/blobdiff - src/ngircd/lists.c
Fix Get_Error() usage, take II
[ngircd-alex.git] / src / ngircd / lists.c
index 247344e508a6e3daf3fc164d1e47ddbdc0e98152..b842ec82e319bbf3812d3b8a16a93e5b0bbe5c39 100644 (file)
@@ -32,7 +32,8 @@ struct list_elem {
        struct list_elem *next; /** pointer to next list element */
        char mask[MASK_LEN];    /** IRC mask */
        char *reason;           /** Optional "reason" text */
-       time_t valid_until;     /** 0: unlimited; 1: once; t(>1): until t */
+       time_t valid_until;     /** 0: unlimited; t(>0): until t */
+       bool onlyonce;
 };
 
 /**
@@ -65,7 +66,7 @@ Lists_GetReason(const struct list_elem *e)
  * Get "validity" value stored in list element.
  *
  * @param list_elem List element.
- * @return Validity: 0=unlimited, 1=once, >1 until this time stamp.
+ * @return Validity: 0=unlimited, >0 until this time stamp.
  */
 GLOBAL time_t
 Lists_GetValidity(const struct list_elem *e)
@@ -74,6 +75,19 @@ Lists_GetValidity(const struct list_elem *e)
        return e->valid_until;
 }
 
+/**
+ * Get "onlyonce" value stored in list element.
+ *
+ * @param list_elem List element.
+ * @return True if the element was stored for single use, false otherwise.
+ */
+GLOBAL bool
+Lists_GetOnlyOnce(const struct list_elem *e)
+{
+       assert(e != NULL);
+       return e->onlyonce;
+}
+
 /**
  * Get first list element of a list.
  *
@@ -111,7 +125,7 @@ Lists_GetNext(const struct list_elem *e)
  */
 bool
 Lists_Add(struct list_head *h, const char *Mask, time_t ValidUntil,
-         const char *Reason)
+         const char *Reason, bool OnlyOnce)
 {
        struct list_elem *e, *newelem;
 
@@ -148,6 +162,7 @@ Lists_Add(struct list_head *h, const char *Mask, time_t ValidUntil,
        else
                newelem->reason = NULL;
        newelem->valid_until = ValidUntil;
+       newelem->onlyonce = OnlyOnce;
        newelem->next = e;
        h->first = newelem;
 
@@ -329,7 +344,7 @@ Lists_CheckReason(struct list_head *h, CLIENT *Client, char *reason, size_t len)
                if (MatchCaseInsensitive(e->mask, Client_MaskCloaked(Client))) {
                        if (len && e->reason)
                                strlcpy(reason, e->reason, len);
-                       if (e->valid_until == 1) {
+                       if (e->onlyonce) {
                                /* Entry is valid only once, delete it */
                                LogDebug("Deleted \"%s\" from list (used).",
                                         e->mask);
@@ -363,14 +378,14 @@ Lists_Expire(struct list_head *h, const char *ListName)
 
        while (e) {
                next = e->next;
-               if (e->valid_until > 1 && e->valid_until < now) {
+               if (e->valid_until > 0 && e->valid_until < now) {
                        /* Entry is expired, delete it */
                        if (e->reason)
-                               Log(LOG_INFO,
+                               Log(LOG_NOTICE|LOG_snotice,
                                    "Deleted \"%s\" (\"%s\") from %s list (expired).",
                                    e->mask, e->reason, ListName);
                        else
-                               Log(LOG_INFO,
+                               Log(LOG_NOTICE|LOG_snotice,
                                    "Deleted \"%s\" from %s list (expired).",
                                    e->mask, ListName);
                        Lists_Unlink(h, last, e);