From ce6606e121a2d523b27a4fb44c33a1827e128c2b Mon Sep 17 00:00:00 2001 From: Alejandro Colomar Date: Tue, 20 Oct 2020 23:31:06 +0200 Subject: [PATCH] list.3: Add details list.3: NAME: Add description list.3: DESCRIPTION: Add short description list.3: SEE ALSO: Add insque(3) and queue(3) list.3: BUGS: Note LIST_FOREACH() limitations list.3: RETURN VALUE: Add details about the return value of those macros that "return" a value Signed-off-by: Alejandro Colomar Signed-off-by: Michael Kerrisk --- man3/list.3 | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/man3/list.3 b/man3/list.3 index 0f9b20d26..8233c3b3e 100644 --- a/man3/list.3 +++ b/man3/list.3 @@ -48,6 +48,7 @@ LIST_NEXT, LIST_PREV, LIST_REMOVE .\"LIST_SWAP +\- implementation of a doubly-linked list .SH SYNOPSIS .nf .B #include @@ -87,6 +88,8 @@ LIST_REMOVE .\".BI "void LIST_SWAP(LIST_HEAD *" head1 ", LIST_HEAD *" head2 ", TYPE, LIST_ENTRY " NAME ");" .fi .SH DESCRIPTION +These macros define and operate on doubly-linked lists. +.PP In the macro definitions, .I TYPE is the name of a user defined structure, @@ -253,11 +256,39 @@ from the list. .\" and .\" .IR head2 . .SH RETURN VALUE +.BR LIST_EMPTY () +returns non-zero if the list is empty, +and zero if the list contains at least one entry. +.PP +.BR LIST_FIRST (), +and +.BR LIST_NEXT () +return a pointer to the first or next +.I LIST_ENTRY +structre, respectively. +.PP +.BR LIST_HEAD_INITIALIZER () +returns an initializer that can be assigned to the list +.IR head . .SH CONFORMING TO Not in POSIX.1, POSIX.1-2001 or POSIX.1-2008. Present on the BSDs (LIST macros first appeared in 4.4BSD). .SH BUGS +The macro +.BR LIST_FOREACH () +doesn't allow +.I var +to be removed or freed within the loop, +as it would interfere with the traversal. +The macro +.BR LIST_FOREACH_SAFE (), +which is not present in glibc, +solves this bug by +allowing to both remove +.I var +as well as free it from within the loop safely +without interfering with the traversal. .SH EXAMPLES .EX #include @@ -312,3 +343,5 @@ main(void) } .EE .SH SEE ALSO +.BR insque (3), +.BR queue (3)