]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
move dlist out to its own file
authorAlan T. DeKok <aland@freeradius.org>
Thu, 16 Nov 2023 23:51:00 +0000 (18:51 -0500)
committerAlan T. DeKok <aland@freeradius.org>
Thu, 16 Nov 2023 23:57:29 +0000 (18:57 -0500)
and correct head / tail misuse in dpsk code

src/include/dlist.h [new file with mode: 0644]
src/modules/rlm_dpsk/rlm_dpsk.c

diff --git a/src/include/dlist.h b/src/include/dlist.h
new file mode 100644 (file)
index 0000000..c1bc1d5
--- /dev/null
@@ -0,0 +1,63 @@
+/*
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 2 of the License, or
+ *   (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * $Id$
+ *
+ * @file dlist.h
+ * @brief doubly linked lists
+ *
+ * @copyright 2023 Network RADIUS SAS (legal@networkradius.com)
+ */
+
+#ifndef RADIUS_DLIST_H
+#define RADIUS_DLIST_H
+
+RCSIDH(dlist_h, "$Id$")
+
+/*
+ *     We have an internal cache, keyed by (mac + ssid).
+ *
+ *     It returns the PMK and PSK for the user.
+ */
+typedef struct fr_dlist_s fr_dlist_t;
+
+struct fr_dlist_s {
+       fr_dlist_t      *prev;
+       fr_dlist_t      *next;
+};
+
+static inline void fr_dlist_entry_init(fr_dlist_t *entry)
+{
+       entry->prev = entry->next = entry;
+}
+
+static inline CC_HINT(nonnull) void fr_dlist_entry_unlink(fr_dlist_t *entry)
+{
+       entry->prev->next = entry->next;
+       entry->next->prev = entry->prev;
+       entry->prev = entry->next = entry;
+}
+
+static inline CC_HINT(nonnull) void fr_dlist_insert_tail(fr_dlist_t *head, fr_dlist_t *entry)
+{
+       entry->next = head;
+       entry->prev = head->prev;
+       head->prev->next = entry;
+       head->prev = entry;
+}
+
+#endif /* RADIUS_DLIST_H */
index 22dff31b523d718e06069f2ae8de0d95aad9435a..6ca43ee39c4122c8c618d8c76d4894d86904bdb9 100644 (file)
@@ -28,6 +28,7 @@ RCSID("$Id$")
 
 #include <freeradius-devel/radiusd.h>
 #include <freeradius-devel/modules.h>
+#include <freeradius-devel/dlist.h>
 #include <freeradius-devel/rad_assert.h>
 
 #include <openssl/ssl.h>
@@ -89,38 +90,6 @@ typedef struct eapol_attr_t {
        eapol_key_frame_t frame;
 } CC_HINT(__packed__) eapol_attr_t;
 
-/*
- *     We have an internal cache, keyed by (mac + ssid).
- *
- *     It returns the PMK and PSK for the user.
- */
-typedef struct fr_dlist_s fr_dlist_t;
-
-struct fr_dlist_s {
-       fr_dlist_t      *prev;
-       fr_dlist_t      *next;
-};
-
-static inline void fr_dlist_entry_init(fr_dlist_t *entry)
-{
-       entry->prev = entry->next = entry;
-}
-
-static inline CC_HINT(nonnull) void fr_dlist_entry_unlink(fr_dlist_t *entry)
-{
-       entry->prev->next = entry->next;
-       entry->next->prev = entry->prev;
-       entry->prev = entry->next = entry;
-}
-
-static inline CC_HINT(nonnull) void fr_dlist_insert_tail(fr_dlist_t *head, fr_dlist_t *entry)
-{
-       entry->next = head;
-       entry->prev = head->prev;
-       head->prev->next = entry;
-       head->prev = entry;
-}
-
 #ifdef HAVE_PTHREAD_H
 #define PTHREAD_MUTEX_LOCK pthread_mutex_lock
 #define PTHREAD_MUTEX_UNLOCK pthread_mutex_unlock
@@ -182,11 +151,11 @@ static const CONF_PARSER module_config[] = {
 };
 
 
-static inline CC_HINT(nonnull) rlm_dpsk_cache_t *fr_dlist_tail(fr_dlist_t const *head)
+static inline CC_HINT(nonnull) rlm_dpsk_cache_t *fr_dlist_head(fr_dlist_t const *head)
 {
        if (head->prev == head) return NULL;
 
-       return (rlm_dpsk_cache_t *) (((uintptr_t) head->prev) - offsetof(rlm_dpsk_cache_t, dlist));
+       return (rlm_dpsk_cache_t *) (((uintptr_t) head->next) - offsetof(rlm_dpsk_cache_t, dlist));
 }
 
 static void rdebug_hex(REQUEST *request, char const *prefix, uint8_t const *data, int len)
@@ -698,7 +667,7 @@ make_digest:
                         */
                        if (rbtree_num_elements(inst->cache) > inst->cache_size) {
                                PTHREAD_MUTEX_LOCK(&inst->mutex);
-                               entry = fr_dlist_tail(&inst->head);
+                               entry = fr_dlist_head(&inst->head);
                                PTHREAD_MUTEX_UNLOCK(&inst->mutex);
 
                                rbtree_deletebydata(inst->cache, entry);