sys/queue.h: move trashing from SLIST_REMOVE to REMOVE_AFTER, REMOVE_HEAD

SLIST_REMOVE calls either REMOVE_AFTER or REMOVE_HEAD to do the job.
But those two macros can be used independently as well.

MFC after:	2 weeks
This commit is contained in:
Andriy Gapon 2021-12-15 13:27:49 +02:00
parent b7bcd21d2d
commit 5dab06a003

View File

@ -272,7 +272,6 @@ struct { \
#define SLIST_NEXT(elm, field) ((elm)->field.sle_next)
#define SLIST_REMOVE(head, elm, type, field) do { \
QMD_SAVELINK(oldnext, (elm)->field.sle_next); \
if (SLIST_FIRST((head)) == (elm)) { \
SLIST_REMOVE_HEAD((head), field); \
} \
@ -282,16 +281,19 @@ struct { \
curelm = SLIST_NEXT(curelm, field); \
SLIST_REMOVE_AFTER(curelm, field); \
} \
TRASHIT(*oldnext); \
} while (0)
#define SLIST_REMOVE_AFTER(elm, field) do { \
QMD_SAVELINK(oldnext, SLIST_NEXT(elm, field)->field.sle_next); \
SLIST_NEXT(elm, field) = \
SLIST_NEXT(SLIST_NEXT(elm, field), field); \
TRASHIT(*oldnext); \
} while (0)
#define SLIST_REMOVE_HEAD(head, field) do { \
QMD_SAVELINK(oldnext, SLIST_FIRST(head)->field.sle_next); \
SLIST_FIRST((head)) = SLIST_NEXT(SLIST_FIRST((head)), field); \
TRASHIT(*oldnext); \
} while (0)
#define SLIST_REMOVE_PREVPTR(prevp, elm, field) do { \