From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 48215 invoked by alias); 4 Apr 2017 09:53:38 -0000 Mailing-List: contact newlib-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: newlib-owner@sourceware.org Received: (qmail 48204 invoked by uid 89); 4 Apr 2017 09:53:37 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.9 required=5.0 tests=BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_LAZY_DOMAIN_SECURITY,RP_MATCHES_RCVD,SPF_HELO_PASS autolearn=ham version=3.3.2 spammy= X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 04 Apr 2017 09:53:36 +0000 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 51E723B755 for ; Tue, 4 Apr 2017 09:53:35 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 51E723B755 Authentication-Results: ext-mx06.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx06.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=vinschen@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 51E723B755 Received: from calimero.vinschen.de (unknown [10.36.118.56]) by smtp.corp.redhat.com (Postfix) with ESMTP id EA81C953B5 for ; Tue, 4 Apr 2017 09:53:34 +0000 (UTC) Received: by calimero.vinschen.de (Postfix, from userid 500) id D20B9A805C9; Tue, 4 Apr 2017 11:53:33 +0200 (CEST) Date: Tue, 04 Apr 2017 09:53:00 -0000 From: Corinna Vinschen To: newlib@sourceware.org Subject: Re: [PATCH 1/8] Add new FOREACH_FROM variants of the queue(3) FOREACH macros which can optionally start the traversal from a previously found element by passing the element in as "var". Passing a NULL "var" retains the same semantics as the regular FOREACH macros. Message-ID: <20170404095333.GB2961@calimero.vinschen.de> Reply-To: newlib@sourceware.org Mail-Followup-To: newlib@sourceware.org References: <1491294889-9721-1-git-send-email-sebastian.huber@embedded-brains.de> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="bCsyhTFzCvuiizWE" Content-Disposition: inline In-Reply-To: <1491294889-9721-1-git-send-email-sebastian.huber@embedded-brains.de> User-Agent: Mutt/1.8.0 (2017-02-23) X-SW-Source: 2017/txt/msg00265.txt.bz2 --bCsyhTFzCvuiizWE Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Content-length: 5545 Hi Sebastian, would you mind to resend the patches 1, 2, 4, 5, with subject length restricted to +/- 72 chars? There was only one such patch in your previous patchset, so I fixed that myself. Thanks, Corinna On Apr 4 10:34, Sebastian Huber wrote: > From: lstewart >=20 > Kudos to phk for suggesting the "FROM" suffix instead of my original prop= osal. >=20 > Reviewed by: jhb (previous version), rpaulo > MFC after: 1 week > --- > newlib/libc/include/sys/queue.h | 53 +++++++++++++++++++++++++++++++++++= ++++++ > 1 file changed, 53 insertions(+) >=20 > diff --git a/newlib/libc/include/sys/queue.h b/newlib/libc/include/sys/qu= eue.h > index 4bc7dac..7a5bc79 100644 > --- a/newlib/libc/include/sys/queue.h > +++ b/newlib/libc/include/sys/queue.h > @@ -88,9 +88,13 @@ > * _PREV - + - + > * _LAST - - + + > * _FOREACH + + + + > + * _FOREACH_FROM + + + + > * _FOREACH_SAFE + + + + > + * _FOREACH_FROM_SAFE + + + + > * _FOREACH_REVERSE - - - + > + * _FOREACH_REVERSE_FROM - - - + > * _FOREACH_REVERSE_SAFE - - - + > + * _FOREACH_REVERSE_FROM_SAFE - - - + > * _INSERT_HEAD + + + + > * _INSERT_BEFORE - + - + > * _INSERT_AFTER + + + + > @@ -167,11 +171,21 @@ struct { \ > (var); \ > (var) =3D SLIST_NEXT((var), field)) >=20=20 > +#define SLIST_FOREACH_FROM(var, head, field) \ > + for ((var) =3D ((var) ? (var) : SLIST_FIRST((head))); \ > + (var); \ > + (var) =3D SLIST_NEXT((var), field)) > + > #define SLIST_FOREACH_SAFE(var, head, field, tvar) \ > for ((var) =3D SLIST_FIRST((head)); \ > (var) && ((tvar) =3D SLIST_NEXT((var), field), 1); \ > (var) =3D (tvar)) >=20=20 > +#define SLIST_FOREACH_FROM_SAFE(var, head, field, tvar) \ > + for ((var) =3D ((var) ? (var) : SLIST_FIRST((head))); \ > + (var) && ((tvar) =3D SLIST_NEXT((var), field), 1); \ > + (var) =3D (tvar)) > + > #define SLIST_FOREACH_PREVPTR(var, varp, head, field) \ > for ((varp) =3D &SLIST_FIRST((head)); \ > ((var) =3D *(varp)) !=3D NULL; \ > @@ -259,12 +273,21 @@ struct { \ > (var); \ > (var) =3D STAILQ_NEXT((var), field)) >=20=20 > +#define STAILQ_FOREACH_FROM(var, head, field) \ > + for ((var) =3D ((var) ? (var) : STAILQ_FIRST((head))); \ > + (var); \ > + (var) =3D STAILQ_NEXT((var), field)) >=20=20 > #define STAILQ_FOREACH_SAFE(var, head, field, tvar) \ > for ((var) =3D STAILQ_FIRST((head)); \ > (var) && ((tvar) =3D STAILQ_NEXT((var), field), 1); \ > (var) =3D (tvar)) >=20=20 > +#define STAILQ_FOREACH_FROM_SAFE(var, head, field, tvar) \ > + for ((var) =3D ((var) ? (var) : STAILQ_FIRST((head))); \ > + (var) && ((tvar) =3D STAILQ_NEXT((var), field), 1); \ > + (var) =3D (tvar)) > + > #define STAILQ_INIT(head) do { \ > STAILQ_FIRST((head)) =3D NULL; \ > (head)->stqh_last =3D &STAILQ_FIRST((head)); \ > @@ -394,11 +417,21 @@ struct { \ > (var); \ > (var) =3D LIST_NEXT((var), field)) >=20=20 > +#define LIST_FOREACH_FROM(var, head, field) \ > + for ((var) =3D ((var) ? (var) : LIST_FIRST((head))); \ > + (var); \ > + (var) =3D LIST_NEXT((var), field)) > + > #define LIST_FOREACH_SAFE(var, head, field, tvar) \ > for ((var) =3D LIST_FIRST((head)); \ > (var) && ((tvar) =3D LIST_NEXT((var), field), 1); \ > (var) =3D (tvar)) >=20=20 > +#define LIST_FOREACH_FROM_SAFE(var, head, field, tvar) \ > + for ((var) =3D ((var) ? (var) : LIST_FIRST((head))); \ > + (var) && ((tvar) =3D LIST_NEXT((var), field), 1); \ > + (var) =3D (tvar)) > + > #define LIST_INIT(head) do { \ > LIST_FIRST((head)) =3D NULL; \ > } while (0) > @@ -531,21 +564,41 @@ struct { \ > (var); \ > (var) =3D TAILQ_NEXT((var), field)) >=20=20 > +#define TAILQ_FOREACH_FROM(var, head, field) \ > + for ((var) =3D ((var) ? (var) : TAILQ_FIRST((head))); \ > + (var); \ > + (var) =3D TAILQ_NEXT((var), field)) > + > #define TAILQ_FOREACH_SAFE(var, head, field, tvar) \ > for ((var) =3D TAILQ_FIRST((head)); \ > (var) && ((tvar) =3D TAILQ_NEXT((var), field), 1); \ > (var) =3D (tvar)) >=20=20 > +#define TAILQ_FOREACH_FROM_SAFE(var, head, field, tvar) \ > + for ((var) =3D ((var) ? (var) : TAILQ_FIRST((head))); \ > + (var) && ((tvar) =3D TAILQ_NEXT((var), field), 1); \ > + (var) =3D (tvar)) > + > #define TAILQ_FOREACH_REVERSE(var, head, headname, field) \ > for ((var) =3D TAILQ_LAST((head), headname); \ > (var); \ > (var) =3D TAILQ_PREV((var), headname, field)) >=20=20 > +#define TAILQ_FOREACH_REVERSE_FROM(var, head, headname, field) \ > + for ((var) =3D ((var) ? (var) : TAILQ_LAST((head), headname)); \ > + (var); \ > + (var) =3D TAILQ_PREV((var), headname, field)) > + > #define TAILQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar) \ > for ((var) =3D TAILQ_LAST((head), headname); \ > (var) && ((tvar) =3D TAILQ_PREV((var), headname, field), 1); \ > (var) =3D (tvar)) >=20=20 > +#define TAILQ_FOREACH_REVERSE_FROM_SAFE(var, head, headname, field, tvar= ) \ > + for ((var) =3D ((var) ? (var) : TAILQ_LAST((head), headname)); \ > + (var) && ((tvar) =3D TAILQ_PREV((var), headname, field), 1); \ > + (var) =3D (tvar)) > + > #define TAILQ_INIT(head) do { \ > TAILQ_FIRST((head)) =3D NULL; \ > (head)->tqh_last =3D &TAILQ_FIRST((head)); \ > --=20 > 1.8.4.5 --=20 Corinna Vinschen Cygwin Maintainer Red Hat --bCsyhTFzCvuiizWE Content-Type: application/pgp-signature; name="signature.asc" Content-length: 819 -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQIcBAEBCAAGBQJY420dAAoJEPU2Bp2uRE+gg0YP+weaBDqsLaKRG+/DtrJKSVqV 2IF7399QBmZHfy1DsXFTacDfN26R30S3IOVn6x2Ar7wmARBQ110dqFdxiuT9VPi8 IkXOL/rWI0kl/gDBmRBVkLdOuNjfwMUJIELWSz6JWI+EjjfNjUn0AEIF+PpvzWL9 vBT1nwIfeSXR7XqfS/2+KLltuA+Pd7Q8M7K+yRogM4xm63TLjMS6U3Y3Di3yOLeX 1QKM5pZloMxXnckRwhU1i82m94hy8RINEb8qjxo6YuqU4wL6RZUWHMKoKAFHesFu PlQjoWbbwypNNCphs271xXysFTD3rd90uyG66vX8uTMhlPubgmXf2uuoBUvm+v07 xDoR/pzgHOtFMTa2k4lD2eHKKl31WiJLBZFPoDA+LyuVVaA+kuZeIXe86qQWmz/+ cHs3uDvlN/NF/gmI6PRpnCW0Wu8fZGIozUxqY+7JDEK7t+wSVS79aDVLI/Gs11C0 MWmItajzgprjJwxcSqbp7CEE0hbOSB4o2Ie72qt51C5LE6E/2alzRd3FNv0TA6X1 fETtjx8jl/RMYKj49l+ewlt/NaIudzfIYRxE/+0qnuqzYeuMWOe8dyR2RgemZHP8 p1IB7B5otNAGESlrQntg3CfQs+T6VyiV5xa5dF7sGh2DMH4dDT0Kfi8W53UyYZa9 dWdthrevu1J7HIj3qrhC =cX0+ -----END PGP SIGNATURE----- --bCsyhTFzCvuiizWE--