From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1L2oXN-0004sP-Ag for qemu-devel@nongnu.org; Wed, 19 Nov 2008 10:00:13 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1L2oXL-0004qL-DE for qemu-devel@nongnu.org; Wed, 19 Nov 2008 10:00:12 -0500 Received: from [199.232.76.173] (port=50463 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1L2oXL-0004qI-3y for qemu-devel@nongnu.org; Wed, 19 Nov 2008 10:00:11 -0500 Received: from qb-out-0506.google.com ([72.14.204.233]:51282) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1L2oXJ-0001TS-Jq for qemu-devel@nongnu.org; Wed, 19 Nov 2008 10:00:09 -0500 Received: by qb-out-0506.google.com with SMTP id e12so3194854qba.0 for ; Wed, 19 Nov 2008 07:00:08 -0800 (PST) Message-ID: <492429F3.3010202@codemonkey.ws> Date: Wed, 19 Nov 2008 09:00:03 -0600 From: Anthony Liguori MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH 1/2] Add TAILQ_FOREACH_SAFE References: <20081119134857.26075.2417.stgit@mchn012c.ww002.siemens.net> <20081119134857.26075.9428.stgit@mchn012c.ww002.siemens.net> In-Reply-To: <20081119134857.26075.9428.stgit@mchn012c.ww002.siemens.net> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Jan Kiszka wrote: > Add TAILQ iterator that allows to safely remove elements while walking > the list. > > Signed-off-by: Jan Kiszka > --- > > sys-queue.h | 6 ++++++ > 1 files changed, 6 insertions(+), 0 deletions(-) > > diff --git a/sys-queue.h b/sys-queue.h > index 3d0773e..b92a77f 100644 > --- a/sys-queue.h > +++ b/sys-queue.h > @@ -210,6 +210,12 @@ struct { \ > (var); \ > (var) = ((var)->field.tqe_next)) > > +#define TAILQ_FOREACH_SAFE(var, head, field, next_var) \ > + for ((var) = ((head)->tqh_first); \ > + (var) ? ({ (next_var) = ((var)->field.tqe_next); 1; }) \ > + : 0; \ > + (var) = (next_var)) > So the Linux implementation of this is: #define list_for_each_safe(pos, n, head) \ for (pos = (head)->next, n = pos->next; pos != (head); \ pos = n, n = pos->next) I'd prefer something similar: #define TAILQ_FOREACH_SAFE(var, head, field, next_var) for (var = (head)->tqh_first, next_var = var->field.tqe_next; var; var = next_var, next_var = var->field.tqe_next) As it's functionally equivalent and avoids using a GCC-ism ({}). Regards, Anthony Liguori