summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2024-06-21 16:19:04 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2024-06-21 16:19:04 (GMT)
commita21d9f936fe5e795cbea48aa4a4e72adc19e45dd (patch)
tree3721f8866316884e91ef3caf80b5e6b007c91323
parent0af609c6bf382bffaf3d96383eddf667793f39b4 (diff)
Restore and update doubly linked lists.
-rw-r--r--src/common/Makefile.am4
-rw-r--r--src/common/dllist.c26
-rw-r--r--src/common/dllist.h39
3 files changed, 36 insertions, 33 deletions
diff --git a/src/common/Makefile.am b/src/common/Makefile.am
index 8161f8e..27ead1d 100644
--- a/src/common/Makefile.am
+++ b/src/common/Makefile.am
@@ -10,7 +10,6 @@ libcommon_la_SOURCES = \
compression.h compression.c \
cpp.h \
cpu.h cpu.c \
- dllist.h dllist.c \
environment.h environment.c \
extstr.h extstr.c \
hex.h hex.c \
@@ -18,7 +17,6 @@ libcommon_la_SOURCES = \
io.h io.c \
itoa.h itoa.c \
leb128.h leb128.c \
- macros.h \
net.h net.c \
packed.h packed.c \
pathname.h pathname.c \
@@ -55,11 +53,13 @@ libcommon4_la_SOURCES = \
bits.h bits.c \
compiler.h \
datatypes.h \
+ dllist.h dllist.c \
environment.h environment.c \
extstr.h extstr.c \
fnv1a.h fnv1a.c \
io.h io.c \
leb128.h leb128.c \
+ macros.h \
packed.h packed.c \
pathname.h pathname.c \
sort.h sort.c \
diff --git a/src/common/dllist.c b/src/common/dllist.c
index 1ee7b0d..92406d7 100644
--- a/src/common/dllist.c
+++ b/src/common/dllist.c
@@ -29,10 +29,10 @@
/* Découpe une liste en deux parties. */
-static void split_dl_lists(dl_list_head, dl_list_head *, dl_list_head *);
+static void split_dl_lists(dl_list_head_t, dl_list_head_t *, dl_list_head_t *);
/* Trie une liste chaînée en supprimant les éléments identiques. */
-static dl_list_head sort_and_merge_dl_lists_no_dup(dl_list_head *, dl_list_head *, size_t *, __dl_item_compar_fn_t, dl_list_head *);
+static dl_list_head_t sort_and_merge_dl_lists_no_dup(dl_list_head_t *, dl_list_head_t *, size_t *, __dl_item_compar_fn_t, dl_list_head_t *);
@@ -51,7 +51,7 @@ static dl_list_head sort_and_merge_dl_lists_no_dup(dl_list_head *, dl_list_head
* *
******************************************************************************/
-void __dl_list_add(dl_list_item *new, dl_list_head *head, dl_list_item *prev, dl_list_item *next)
+void __dl_list_add(dl_list_item_t *new, dl_list_head_t *head, dl_list_item_t *prev, dl_list_item_t *next)
{
prev->next = new;
new->prev = prev;
@@ -78,7 +78,7 @@ void __dl_list_add(dl_list_item *new, dl_list_head *head, dl_list_item *prev, dl
* *
******************************************************************************/
-void __dl_list_del(dl_list_item *item, dl_list_head *head)
+void __dl_list_del(dl_list_item_t *item, dl_list_head_t *head)
{
item->next->prev = item->prev;
item->prev->next = item->next;
@@ -106,10 +106,10 @@ void __dl_list_del(dl_list_item *item, dl_list_head *head)
* *
******************************************************************************/
-static void split_dl_lists(dl_list_head list, dl_list_head *part1, dl_list_head *part2)
+static void split_dl_lists(dl_list_head_t list, dl_list_head_t *part1, dl_list_head_t *part2)
{
- dl_list_item *iter_slow; /* Boucle de parcours #1 */
- dl_list_item *iter_fast; /* Boucle de parcours #2 */
+ dl_list_item_t *iter_slow; /* Boucle de parcours #1 */
+ dl_list_item_t *iter_fast; /* Boucle de parcours #2 */
*part1 = list;
@@ -159,11 +159,11 @@ static void split_dl_lists(dl_list_head list, dl_list_head *part1, dl_list_head
* *
******************************************************************************/
-static dl_list_head sort_and_merge_dl_lists_no_dup(dl_list_head *a, dl_list_head *b, size_t *length, __dl_item_compar_fn_t compar, dl_list_head *duplicated)
+static dl_list_head_t sort_and_merge_dl_lists_no_dup(dl_list_head_t *a, dl_list_head_t *b, size_t *length, __dl_item_compar_fn_t compar, dl_list_head_t *duplicated)
{
- dl_list_head result; /* Liste fusionnée à renvoyer */
+ dl_list_head_t result; /* Liste fusionnée à renvoyer */
int ret; /* Bilan d'une comparaison */
- dl_list_head next; /* Maillons de liste suivants */
+ dl_list_head_t next; /* Maillons de liste suivants */
if (dl_list_empty(*a))
result = *b;
@@ -253,10 +253,10 @@ static dl_list_head sort_and_merge_dl_lists_no_dup(dl_list_head *a, dl_list_head
* *
******************************************************************************/
-void sort_dl_list_no_dup(dl_list_head *head, size_t *length, __dl_item_compar_fn_t compar, dl_list_head *duplicated)
+void sort_dl_list_no_dup(dl_list_head_t *head, size_t *length, __dl_item_compar_fn_t compar, dl_list_head_t *duplicated)
{
- dl_list_head part1; /* Première moitiée à traiter */
- dl_list_head part2; /* Seconde moitiée à traiter */
+ dl_list_head_t part1; /* Première moitiée à traiter */
+ dl_list_head_t part2; /* Seconde moitiée à traiter */
/* S'il y a réellement quelque chose à faire */
if (!dl_list_empty(*head) && !_dl_list_is_last(*head, *head))
diff --git a/src/common/dllist.h b/src/common/dllist.h
index 1fb010a..f7b500e 100644
--- a/src/common/dllist.h
+++ b/src/common/dllist.h
@@ -30,17 +30,17 @@
/* Structure à inclure en tête de structure */
-typedef struct _dl_list_item
+typedef struct _dl_list_item_t
{
- struct _dl_list_item *prev; /* Elément précédent */
- struct _dl_list_item *next; /* Elément suivant */
+ struct _dl_list_item_t *prev; /* Elément précédent */
+ struct _dl_list_item_t *next; /* Elément suivant */
-} dl_list_item;
+} dl_list_item_t;
-typedef dl_list_item *dl_list_head;
+typedef dl_list_item_t *dl_list_head_t;
-#define DL_LIST_ITEM(name) dl_list_item name
+#define DL_LIST_ITEM(name) dl_list_item_t name
#define DL_LIST_ITEM_INIT(item) \
@@ -51,12 +51,15 @@ typedef dl_list_item *dl_list_head;
\
} while(0)
+#define DL_LIST_HEAD_INIT(head) \
+ head = NULL
+
/* Ajoute un élément dans une liste doublement chaînée. */
-void __dl_list_add(dl_list_item *, dl_list_head *, dl_list_item *, dl_list_item *);
+void __dl_list_add(dl_list_item_t *, dl_list_head_t *, dl_list_item_t *, dl_list_item_t *);
/* Supprime un élément d'une liste doublement chaînée. */
-void __dl_list_del(dl_list_item *, dl_list_head *);
+void __dl_list_del(dl_list_item_t *, dl_list_head_t *);
#define dl_list_empty(head) \
@@ -74,7 +77,7 @@ void __dl_list_del(dl_list_item *, dl_list_head *);
#define dl_list_add(new, head, type, member) \
do \
{ \
- dl_list_item *hmbr = (dl_list_empty(*(head)) ? NULL : &(*head)->member); \
+ dl_list_item_t *hmbr = (dl_list_empty(*(head)) ? NULL : &(*head)->member); \
__dl_list_add(&new->member, &hmbr, \
dl_list_empty(*(head)) ? &new->member : hmbr->prev, \
dl_list_empty(*(head)) ? &new->member : hmbr); \
@@ -96,7 +99,7 @@ void __dl_list_del(dl_list_item *, dl_list_head *);
#define dl_list_add_tail(new, head, type, member) \
do \
{ \
- dl_list_item *hmbr = (dl_list_empty(*(head)) ? NULL : &(*head)->member); \
+ dl_list_item_t *hmbr = (dl_list_empty(*(head)) ? NULL : &(*head)->member); \
__dl_list_add(&new->member, &hmbr, \
dl_list_empty(*(head)) ? &new->member : hmbr->prev, \
dl_list_empty(*(head)) ? &new->member : hmbr); \
@@ -107,7 +110,7 @@ void __dl_list_del(dl_list_item *, dl_list_head *);
#define dl_list_del(item, head, type, member) \
do \
{ \
- dl_list_item *hmbr = &(*head)->member; \
+ dl_list_item_t *hmbr = &(*head)->member; \
__dl_list_del(&item->member, &hmbr); \
*(head) = (hmbr ? container_of(hmbr, type, member) : NULL); \
DL_LIST_ITEM_INIT(&item->member); \
@@ -117,7 +120,7 @@ void __dl_list_del(dl_list_item *, dl_list_head *);
#define _dl_list_merge(head1, head2) \
do \
{ \
- dl_list_item *mid = head1->prev; \
+ dl_list_item_t *mid = head1->prev; \
mid->next = head2; \
head1->prev = head2->prev; \
head2->prev->next = head1; \
@@ -131,9 +134,9 @@ void __dl_list_del(dl_list_item *, dl_list_head *);
if (dl_list_empty(*head1)) *head1 = *head2; \
else if (!dl_list_empty(*head2)) \
{ \
- dl_list_item *hmbr1 = &(*head1)->member; \
- dl_list_item *hmbr2 = &(*head2)->member; \
- dl_list_item *mid = hmbr1->prev; \
+ dl_list_item_t *hmbr1 = &(*head1)->member; \
+ dl_list_item_t *hmbr2 = &(*head2)->member; \
+ dl_list_item_t *mid = hmbr1->prev; \
mid->next = hmbr2; \
hmbr1->prev = hmbr2->prev; \
hmbr2->prev->next = hmbr1; \
@@ -153,7 +156,7 @@ void __dl_list_del(dl_list_item *, dl_list_head *);
#define _dl_list_next(iter, head) \
({ \
- dl_list_item *__next; \
+ dl_list_item_t *__next; \
__next = iter->next; \
if (__next == head) \
__next = NULL; \
@@ -192,10 +195,10 @@ void __dl_list_del(dl_list_item *, dl_list_head *);
/* Prototype pour un comparateur d'éléments */
-typedef int (*__dl_item_compar_fn_t) (const dl_list_item *, const dl_list_item *);
+typedef int (*__dl_item_compar_fn_t) (const dl_list_item_t *, const dl_list_item_t *);
/* Trie une liste chaînée en notant les éléments identiques. */
-void sort_dl_list_no_dup(dl_list_head *, size_t *, __dl_item_compar_fn_t, dl_list_head *);
+void sort_dl_list_no_dup(dl_list_head_t *, size_t *, __dl_item_compar_fn_t, dl_list_head_t *);