Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id ; Mon, 19 Aug 2002 08:27:06 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id ; Mon, 19 Aug 2002 08:27:06 -0400 Received: from dsl-213-023-038-065.arcor-ip.net ([213.23.38.65]:10719 "EHLO starship") by vger.kernel.org with ESMTP id ; Mon, 19 Aug 2002 08:27:05 -0400 Content-Type: text/plain; charset=US-ASCII From: Daniel Phillips To: William Lee Irwin III Subject: Re: Generic list push/pop Date: Mon, 19 Aug 2002 14:32:48 +0200 X-Mailer: KMail [version 1.3.2] Cc: linux-kernel@vger.kernel.org References: <20020819120550.GA21683@holomorphy.com> In-Reply-To: <20020819120550.GA21683@holomorphy.com> MIME-Version: 1.0 Content-Transfer-Encoding: 7BIT Message-Id: Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1235 Lines: 48 On Monday 19 August 2002 14:05, William Lee Irwin III wrote: > On Sun, Aug 18, 2002 at 09:21:41PM +0200, Daniel Phillips wrote: > > I took a run at writing generic single-linked list push and pop macros, to be > > used in the form: > > Dear gawd, I've gone blind. > > How's this look? Unfortunately, not good. You get code like: foo = (struct mylist *) slist_pop((slist *) &somelist->next); So type safety goes out the window, and you gain some niceness in the definition in exchange for ugliness in usage, the wrong tradeoff imho. > struct slist > { > struct slist *next; > }; > > > static inline void slist_add(struct slist *head, struct slist *elem) > { > elem->next = head->next; > head->next = elem; > } > > #define slist_push(head, elem) slist_add(head, elem) > > static inline struct slist *slist_pop(struct slist *head) > { > struct slist *elem = head->next; > > if (elem) { > head->next = elem->next; > elem->next = NULL; > } > return elem; > } -- Daniel - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/