Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 31 Dec 2001 19:01:26 -0800
From:      Marcel Moolenaar <marcel@xcllnt.net>
To:        Julian Elischer <julian@elischer.org>
Cc:        John Baldwin <jhb@FreeBSD.org>, Poul-Henning Kamp <phk@critter.freebsd.dk>, cvs-all@FreeBSD.org, cvs-committers@FreeBSD.org, Julian Elischer <julian@FreeBSD.org>, Greg Lehey <grog@FreeBSD.org>
Subject:   Re: cvs commit: src/share/man/man3 queue.3
Message-ID:  <20011231190126.A755@dhcp01.pn.xcllnt.net>
In-Reply-To: <Pine.BSF.4.21.0112311706450.10883-100000@InterJet.elischer.org>
References:  <20011231165233.A408@dhcp01.pn.xcllnt.net> <Pine.BSF.4.21.0112311706450.10883-100000@InterJet.elischer.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, Dec 31, 2001 at 05:14:08PM -0800, Julian Elischer wrote:
> 
> > I'd consider this a misuse of _FOREACH, because the something that's
> > being done is definitely not done for each p. Even some_test_on() is
> > not performed on each p. I'm with phk here.
> > 
> > Note that if it's simply too easy to use _FOREACH in these cases, we
> > may want to consider creating a more suitable abstraction, like:
> > 
> > 	TAILQ_UNTIL(p, &list, p_next)
> > 		some_test_on(p);
> > 	if (p == 0)
> > 		return ENOTFOUND;
> > 	/* do something */
> > 	return 0;
> > 
> > Just a thought.
> 
> So you think that the final value of p should be undefined,
> and there is no  built in way to see if there were any elements in the
> list at all or whether we completed the list?

Theoretically speaking, yes.

> I'm just documenting what the code does, and how people have used it.

I understand that and didn't really object to that.

> if you think that phk is correct we should add an example to the man page 
> showing:
> 
> 
> TAILQ_FOREACH(p, &list, p_next)
> 	if (some_test_on(p))
> 		goto fred;
> 	goto jim;
> fred:	print ("we got one");
> jim:

What's wrong with the following if _FOREACH is preferred:

	TAILQ_FOREACH(p, &list, p_next) {
		if (some_test_on(p)) {
			/* Do something */
			break; /* optional */
		}
	}

-- 
 Marcel Moolenaar	  USPA: A-39004		 marcel@xcllnt.net

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe cvs-all" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20011231190126.A755>