slist.3: Add details

Add remaining details to complete the page.

Signed-off-by: Alejandro Colomar <colomar.6.4.3@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
This commit is contained in:
Alejandro Colomar 2020-10-22 14:38:20 +02:00 committed by Michael Kerrisk
parent bb8164dec0
commit 22f12126de
1 changed files with 32 additions and 0 deletions

View File

@ -48,6 +48,7 @@ SLIST_REMOVE,
.\"SLIST_REMOVE_AFTER, .\"SLIST_REMOVE_AFTER,
SLIST_REMOVE_HEAD SLIST_REMOVE_HEAD
.\"SLIST_SWAP .\"SLIST_SWAP
\- implementation of a singly-linked list
.SH SYNOPSIS .SH SYNOPSIS
.nf .nf
.B #include <sys/queue.h> .B #include <sys/queue.h>
@ -87,6 +88,8 @@ SLIST_REMOVE_HEAD
.\".BI "void SLIST_SWAP(SLIST_HEAD *" head1 ", SLIST_HEAD *" head2 ", SLIST_ENTRY " NAME ");" .\".BI "void SLIST_SWAP(SLIST_HEAD *" head1 ", SLIST_HEAD *" head2 ", SLIST_ENTRY " NAME ");"
.fi .fi
.SH DESCRIPTION .SH DESCRIPTION
These macros define and operate on doubly-linked lists.
.PP
In the macro definitions, In the macro definitions,
.I TYPE .I TYPE
is the name of a user-defined structure, is the name of a user-defined structure,
@ -259,11 +262,38 @@ from the list.
.\" and .\" and
.\" .IR head2 . .\" .IR head2 .
.SH RETURN VALUE .SH RETURN VALUE
.BR SLIST_EMPTY ()
returns non-zero if the list is empty,
and zero if the list contains at least one entry.
.PP
.BR SLIST_FIRST (),
and
.BR SLIST_NEXT ()
return a pointer to the first or next
.I SLIST_ENTRY
structure, respectively.
.PP
.BR SLIST_HEAD_INITIALIZER ()
returns an initializer that can be assigned to the list
.IR head .
.SH CONFORMING TO .SH CONFORMING TO
Not in POSIX.1, POSIX.1-2001 or POSIX.1-2008. Not in POSIX.1, POSIX.1-2001 or POSIX.1-2008.
Present on the BSDs Present on the BSDs
(SLIST macros first appeared in 4.4BSD). (SLIST macros first appeared in 4.4BSD).
.SH BUGS .SH BUGS
The macro
.BR SLIST_FOREACH ()
doesn't allow
.I var
to be removed or freed within the loop,
as it would interfere with the traversal.
The macro
.BR SLIST_FOREACH_SAFE (),
which is present on the BSDs but is not present in glibc,
fixes this limitation by allowing
.I var
to safely be removed from the list and freed from within the loop
without interfering with the traversal.
.SH EXAMPLES .SH EXAMPLES
.EX .EX
#include <stddef.h> #include <stddef.h>
@ -321,3 +351,5 @@ main(void)
} }
.EE .EE
.SH SEE ALSO .SH SEE ALSO
.BR insque (3),
.BR queue (3)