update sys-queue.h
PATCH 1/1 update sys-queue.h
Hi,
This patch updates the list implementation(s) in audio/sys-queue.h by grabbing a fresh copy form netbsd and stripping it down a bit. Gives us a few more useful macros for list manipulation and traversal.
cheers,
Gerd
Signature · 1 line
http://kraxel.fedorapeople.org/xenner/
From 873b1b6f77052ecc144254576598d3691066e824 Mon Sep 17 00:00:00 2001
From: Gerd Hoffmann <[email protected]>
Date: Tue, 29 Jul 2008 15:49:48 +0200
Subject: [PATCH 14/22] Update sys-queue.h
- got recent copy from netbsd.
- deleted debug code.
- deleted some list implementations, left in only the ones which qemu already has.
--- audio/sys-queue.h | 579 +++++++++++++++++++++++++++++++---------------------- 1 files changed, 338 insertions(+), 241 deletions(-)
audio/sys-queue.h +338 -241
@@ -1,241 +1,338 @@ -/* -* Copyright (c) 1991, 1993 -* The Regents of the University of California. All rights reserved. -* -* Redistribution and use in source and binary forms, with or without -* modification, are permitted provided that the following conditions -* are met: -* 1. Redistributions of source code must retain the above copyright -* notice, this list of conditions and the following disclaimer. -* 2. Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions and the following disclaimer in the -* documentation and/or other materials provided with the distribution. -* 4. Neither the name of the University nor the names of its contributors -* may be used to endorse or promote products derived from this software -* without specific prior written permission. -* -* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND -* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE -* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -* SUCH DAMAGE. -* -* @(#)queue.h 8.3 (Berkeley) 12/13/93 -*/ - -#ifndef _SYS_QUEUE_H -#define _SYS_QUEUE_H 1 - -/* -* This file defines three types of data structures: lists, tail queues, -* and circular queues. -* -* A list is headed by a single forward pointer (or an array of forward -* pointers for a hash table header). The elements are doubly linked -* so that an arbitrary element can be removed without a need to -* traverse the list. New elements can be added to the list after -* an existing element or at the head of the list. A list may only be -* traversed in the forward direction. -* -* A tail queue is headed by a pair of pointers, one to the head of the -* list and the other to the tail of the list. The elements are doubly -* linked so that an arbitrary element can be removed without a need to -* traverse the list. New elements can be added to the list after -* an existing element, at the head of the list, or at the end of the -* list. A tail queue may only be traversed in the forward direction. -* -* A circle queue is headed by a pair of pointers, one to the head of the -* list and the other to the tail of the list. The elements are doubly -* linked so that an arbitrary element can be removed without a need to -* traverse the list. New elements can be added to the list before or after -* an existing element, at the head of the list, or at the end of the list. -* A circle queue may be traversed in either direction, but has a more -* complex end of list detection. -* -* For details on the use of these macros, see the queue(3) manual page. -*/ - -/* -* List definitions. -*/ -#define LIST_HEAD(name, type) \ -struct name { \ - struct type *lh_first; /* first element */ \ -} - -#define LIST_ENTRY (type) \ -struct { \ - struct type *le_next;/* next element */ \ - struct type **le_prev; /* address of previous next element */ \ -} - -/* -* List functions. -*/ -#define LIST_INIT (head) { \ - (head)->lh_first = NULL; \ -} - -#define LIST_INSERT_AFTER (listelm, elm, field) { \ - if (((elm)->field.le_next = (listelm)->field.le_next) != NULL) \ - (listelm)->field.le_next->field.le_prev = \ - &(elm)->field.le_next; \ - (listelm)->field.le_next = (elm); \ - (elm)->field.le_prev = &(listelm)->field.le_next; \ -} - -#define LIST_INSERT_HEAD (head, elm, field) { \ - if (((elm)->field.le_next = (head)->lh_first) != NULL) \ - (head)->lh_first->field.le_prev = &(elm)->field.le_next;\ - (head)->lh_first = (elm); \ - (elm)->field.le_prev = &(head)->lh_first; \ -} - -#define LIST_REMOVE (elm, field) { \ - if ((elm)->field.le_next != NULL) \ - (elm)->field.le_next->field.le_prev = \ - (elm)->field.le_prev; \ - *(elm)->field.le_prev = (elm)->field.le_next; \ -} - -/* -* Tail queue definitions. -*/ -#define TAILQ_HEAD (name, type) \ -struct name { \ - struct type *tqh_first;/* first element */ \ -struct type **tqh_last;/* addr of last next element */ \ -} - -#define TAILQ_ENTRY (type) \ -struct { \ - struct type *tqe_next;/* next element */ \ -struct type **tqe_prev;/* address of previous next element */ \ -} - -/* -* Tail queue functions. -*/ -#define TAILQ_INIT (head) { \ - (head)->tqh_first = NULL; \ - (head)->tqh_last = &(head)->tqh_first; \ -} - -#define TAILQ_INSERT_HEAD (head, elm, field) { \ - if (((elm)->field.tqe_next = (head)->tqh_first) != NULL) \ - (elm)->field.tqe_next->field.tqe_prev = \ - &(elm)->field.tqe_next; \ - else \ - (head)->tqh_last = &(elm)->field.tqe_next; \ - (head)->tqh_first = (elm); \ - (elm)->field.tqe_prev = &(head)->tqh_first; \ -} - -#define TAILQ_INSERT_TAIL (head, elm, field) { \ - (elm)->field.tqe_next = NULL; \ - (elm)->field.tqe_prev = (head)->tqh_last; \ - *(head)->tqh_last = (elm); \ - (head)->tqh_last = &(elm)->field.tqe_next; \ -} - -#define TAILQ_INSERT_AFTER (head, listelm, elm, field) { \ - if (((elm)->field.tqe_next = (listelm)->field.tqe_next) != NULL)\ - (elm)->field.tqe_next->field.tqe_prev = \ - &(elm)->field.tqe_next; \ - else \ - (head)->tqh_last = &(elm)->field.tqe_next; \ - (listelm)->field.tqe_next = (elm); \ - (elm)->field.tqe_prev = &(listelm)->field.tqe_next; \ -} - -#define TAILQ_REMOVE (head, elm, field) { \ - if (((elm)->field.tqe_next) != NULL) \ - (elm)->field.tqe_next->field.tqe_prev = \ - (elm)->field.tqe_prev; \ - else \ - (head)->tqh_last = (elm)->field.tqe_prev; \ - *(elm)->field.tqe_prev = (elm)->field.tqe_next; \ -} - -/* -* Circular queue definitions. -*/ -#define CIRCLEQ_HEAD (name, type) \ -struct name { \ - struct type *cqh_first;/* first element */ \ -struct type *cqh_last;/* last element */ \ -} - -#define CIRCLEQ_ENTRY (type) \ -struct { \ - struct type *cqe_next;/* next element */ \ -struct type *cqe_prev;/* previous element */ \ -} - -/* -* Circular queue functions. -*/ -#define CIRCLEQ_INIT (head) { \ - (head)->cqh_first = (void *)(head); \ - (head)->cqh_last = (void *)(head); \ -} - -#define CIRCLEQ_INSERT_AFTER (head, listelm, elm, field) { \ - (elm)->field.cqe_next = (listelm)->field.cqe_next; \ - (elm)->field.cqe_prev = (listelm); \ - if ((listelm)->field.cqe_next == (void *)(head)) \ - (head)->cqh_last = (elm); \ - else \ - (listelm)->field.cqe_next->field.cqe_prev = (elm); \ - (listelm)->field.cqe_next = (elm); \ -} - -#define CIRCLEQ_INSERT_BEFORE (head, listelm, elm, field) { \ - (elm)->field.cqe_next = (listelm); \ - (elm)->field.cqe_prev = (listelm)->field.cqe_prev; \ - if ((listelm)->field.cqe_prev == (void *)(head)) \ - (head)->cqh_first = (elm); \ - else \ - (listelm)->field.cqe_prev->field.cqe_next = (elm); \ - (listelm)->field.cqe_prev = (elm); \ -} - -#define CIRCLEQ_INSERT_HEAD (head, elm, field) { \ - (elm)->field.cqe_next = (head)->cqh_first; \ - (elm)->field.cqe_prev = (void *)(head); \ - if ((head)->cqh_last == (void *)(head)) \ - (head)->cqh_last = (elm); \ - else \ - (head)->cqh_first->field.cqe_prev = (elm); \ - (head)->cqh_first = (elm); \ -} - -#define CIRCLEQ_INSERT_TAIL (head, elm, field) { \ - (elm)->field.cqe_next = (void *)(head); \ - (elm)->field.cqe_prev = (head)->cqh_last; \ - if ((head)->cqh_first == (void *)(head)) \ - (head)->cqh_first = (elm); \ - else \ - (head)->cqh_last->field.cqe_next = (elm); \ - (head)->cqh_last = (elm); \ -} - -#define CIRCLEQ_REMOVE (head, elm, field) { \ - if ((elm)->field.cqe_next == (void *)(head)) \ - (head)->cqh_last = (elm)->field.cqe_prev; \ - else \ - (elm)->field.cqe_next->field.cqe_prev = \ - (elm)->field.cqe_prev; \ - if ((elm)->field.cqe_prev == (void *)(head)) \ - (head)->cqh_first = (elm)->field.cqe_next; \ - else \ - (elm)->field.cqe_prev->field.cqe_next = \ - (elm)->field.cqe_next; \ -} -#endif /* sys/queue.h */ +/* $NetBSD: queue.h,v 1.45.14.1 2007/07/18 20:13:24 liamjfoy Exp $ */ + +/* +* Qemu version: Copy from netbsd, removed debug code, removed some of +* the implementations. Left in lists, tail queues and circular queues. +*/ + +/* +* Copyright (c) 1991, 1993 +* The Regents of the University of California. All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* 1. Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* 2. Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the distribution. +* 3. Neither the name of the University nor the names of its contributors +* may be used to endorse or promote products derived from this software +* without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +* SUCH DAMAGE. +* +* @(#)queue.h 8.5 (Berkeley) 8/20/94 +*/ + +#ifndef _SYS_QUEUE_H_ +#define _SYS_QUEUE_H_ + +/* +* This file defines three types of data structures: +* lists, tail queues, and circular queues. +* +* A list is headed by a single forward pointer (or an array of forward +* pointers for a hash table header). The elements are doubly linked +* so that an arbitrary element can be removed without a need to +* traverse the list. New elements can be added to the list before +* or after an existing element or at the head of the list. A list +* may only be traversed in the forward direction. +* +* A tail queue is headed by a pair of pointers, one to the head of the +* list and the other to the tail of the list. The elements are doubly +* linked so that an arbitrary element can be removed without a need to +* traverse the list. New elements can be added to the list before or +* after an existing element, at the head of the list, or at the end of +* the list. A tail queue may be traversed in either direction. +* +* A circle queue is headed by a pair of pointers, one to the head of the +* list and the other to the tail of the list. The elements are doubly +* linked so that an arbitrary element can be removed without a need to +* traverse the list. New elements can be added to the list before or after +* an existing element, at the head of the list, or at the end of the list. +* A circle queue may be traversed in either direction, but has a more +* complex end of list detection. +* +* For details on the use of these macros, see the queue(3) manual page. +*/ + +/* +* List definitions. +*/ +#define LIST_HEAD(name, type) \ +struct name { \ + struct type *lh_first; /* first element */ \ +} + +#define LIST_HEAD_INITIALIZER (head) \ + { NULL } + +#define LIST_ENTRY (type) \ +struct { \ + struct type *le_next;/* next element */ \ + struct type **le_prev; /* address of previous next element */ \ +} + +/* +* List functions. +*/ +#define LIST_INIT(head) do { \ + (head)->lh_first = NULL; \ +} while (/*CONSTCOND*/0) + +#define LIST_INSERT_AFTER(listelm, elm, field) do { \ + if (((elm)->field.le_next = (listelm)->field.le_next) != NULL) \ + (listelm)->field.le_next->field.le_prev = \ + &(elm)->field.le_next; \ + (listelm)->field.le_next = (elm); \ + (elm)->field.le_prev = &(listelm)->field.le_next; \ +} while (/*CONSTCOND*/0) + +#define LIST_INSERT_BEFORE(listelm, elm, field) do { \ + (elm)->field.le_prev = (listelm)->field.le_prev; \ + (elm)->field.le_next = (listelm); \ + *(listelm)->field.le_prev = (elm); \ + (listelm)->field.le_prev = &(elm)->field.le_next; \ +} while (/*CONSTCOND*/0) + +#define LIST_INSERT_HEAD(head, elm, field) do { \ + if (((elm)->field.le_next = (head)->lh_first) != NULL) \ + (head)->lh_first->field.le_prev = &(elm)->field.le_next;\ + (head)->lh_first = (elm); \ + (elm)->field.le_prev = &(head)->lh_first; \ +} while (/*CONSTCOND*/0) + +#define LIST_REMOVE(elm, field) do { \ + if ((elm)->field.le_next != NULL) \ + (elm)->field.le_next->field.le_prev = \ + (elm)->field.le_prev; \ + *(elm)->field.le_prev = (elm)->field.le_next; \ +} while (/*CONSTCOND*/0) + +#define LIST_FOREACH (var, head, field) \ + for ((var) = ((head)->lh_first); \ + (var); \ + (var) = ((var)->field.le_next)) + +/* +* List access methods. +*/ +#define LIST_EMPTY (head) ((head)->lh_first == NULL) +#define LIST_FIRST (head) ((head)->lh_first) +#define LIST_NEXT (elm, field) ((elm)->field.le_next) + + +/* +* Tail queue definitions. +*/ +#define _TAILQ_HEAD(name, type, qual) \ +struct name { \ + qual type *tqh_first; /* first element */ \ + qual type *qual *tqh_last; /* addr of last next element */ \ +} +#define TAILQ_HEAD(name, type) _TAILQ_HEAD(name, struct type,) + +#define TAILQ_HEAD_INITIALIZER (head) \ + { NULL, &(head).tqh_first } + +#define _TAILQ_ENTRY(type, qual) \ +struct { \ + qual type *tqe_next; /* next element */ \ + qual type *qual *tqe_prev; /* address of previous next element */\ +} +#define TAILQ_ENTRY(type) _TAILQ_ENTRY(struct type,) + +/* +* Tail queue functions. +*/ +#define TAILQ_INIT(head) do { \ + (head)->tqh_first = NULL; \ + (head)->tqh_last = &(head)->tqh_first; \ +} while (/*CONSTCOND*/0) + +#define TAILQ_INSERT_HEAD(head, elm, field) do { \ + if (((elm)->field.tqe_next = (head)->tqh_first) != NULL) \ + (head)->tqh_first->field.tqe_prev = \ + &(elm)->field.tqe_next; \ + else \ + (head)->tqh_last = &(elm)->field.tqe_next; \ + (head)->tqh_first = (elm); \ + (elm)->field.tqe_prev = &(head)->tqh_first; \ +} while (/*CONSTCOND*/0) + +#define TAILQ_INSERT_TAIL(head, elm, field) do { \ + (elm)->field.tqe_next = NULL; \ + (elm)->field.tqe_prev = (head)->tqh_last; \ + *(head)->tqh_last = (elm); \ + (head)->tqh_last = &(elm)->field.tqe_next; \ +} while (/*CONSTCOND*/0) + +#define TAILQ_INSERT_AFTER(head, listelm, elm, field) do { \ + if (((elm)->field.tqe_next = (listelm)->field.tqe_next) != NULL)\ + (elm)->field.tqe_next->field.tqe_prev = \ + &(elm)->field.tqe_next; \ + else \ + (head)->tqh_last = &(elm)->field.tqe_next; \ + (listelm)->field.tqe_next = (elm); \ + (elm)->field.tqe_prev = &(listelm)->field.tqe_next; \ +} while (/*CONSTCOND*/0) + +#define TAILQ_INSERT_BEFORE(listelm, elm, field) do { \ + (elm)->field.tqe_prev = (listelm)->field.tqe_prev; \ + (elm)->field.tqe_next = (listelm); \ + *(listelm)->field.tqe_prev = (elm); \ + (listelm)->field.tqe_prev = &(elm)->field.tqe_next; \ +} while (/*CONSTCOND*/0) + +#define TAILQ_REMOVE(head, elm, field) do { \ + if (((elm)->field.tqe_next) != NULL) \ + (elm)->field.tqe_next->field.tqe_prev = \ + (elm)->field.tqe_prev; \ + else \ + (head)->tqh_last = (elm)->field.tqe_prev; \ + *(elm)->field.tqe_prev = (elm)->field.tqe_next; \ +} while (/*CONSTCOND*/0) + +#define TAILQ_FOREACH (var, head, field) \ + for ((var) = ((head)->tqh_first); \ + (var); \ + (var) = ((var)->field.tqe_next)) + +#define TAILQ_FOREACH_REVERSE (var, head, headname, field) \ + for ((var) = (*(((struct headname *)((head)->tqh_last))->tqh_last)); \ + (var); \ + (var) = (*(((struct headname *)((var)->field.tqe_prev))->tqh_last))) + +/* +* Tail queue access methods. +*/ +#define TAILQ_EMPTY (head) ((head)->tqh_first == NULL) +#define TAILQ_FIRST (head) ((head)->tqh_first) +#define TAILQ_NEXT (elm, field) ((elm)->field.tqe_next) + +#define TAILQ_LAST (head, headname) \ + (*(((struct headname *)((head)->tqh_last))->tqh_last)) +#define TAILQ_PREV (elm, headname, field) \ + (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last)) + + +/* +* Circular queue definitions. +*/ +#define CIRCLEQ_HEAD (name, type) \ +struct name { \ + struct type *cqh_first;/* first element */ \ +struct type *cqh_last;/* last element */ \ +} + +#define CIRCLEQ_HEAD_INITIALIZER (head) \ + { (void *)&head, (void *)&head } + +#define CIRCLEQ_ENTRY (type) \ +struct { \ + struct type *cqe_next;/* next element */ \ +struct type *cqe_prev;/* previous element */ \ +} + +/* +* Circular queue functions. +*/ +#define CIRCLEQ_INIT(head) do { \ + (head)->cqh_first = (void *)(head); \ + (head)->cqh_last = (void *)(head); \ +} while (/*CONSTCOND*/0) + +#define CIRCLEQ_INSERT_AFTER(head, listelm, elm, field) do { \ + (elm)->field.cqe_next = (listelm)->field.cqe_next; \ + (elm)->field.cqe_prev = (listelm); \ + if ((listelm)->field.cqe_next == (void *)(head)) \ + (head)->cqh_last = (elm); \ + else \ + (listelm)->field.cqe_next->field.cqe_prev = (elm); \ + (listelm)->field.cqe_next = (elm); \ +} while (/*CONSTCOND*/0) + +#define CIRCLEQ_INSERT_BEFORE(head, listelm, elm, field) do { \ + (elm)->field.cqe_next = (listelm); \ + (elm)->field.cqe_prev = (listelm)->field.cqe_prev; \ + if ((listelm)->field.cqe_prev == (void *)(head)) \ + (head)->cqh_first = (elm); \ + else \ + (listelm)->field.cqe_prev->field.cqe_next = (elm); \ + (listelm)->field.cqe_prev = (elm); \ +} while (/*CONSTCOND*/0) + +#define CIRCLEQ_INSERT_HEAD(head, elm, field) do { \ + (elm)->field.cqe_next = (head)->cqh_first; \ + (elm)->field.cqe_prev = (void *)(head); \ + if ((head)->cqh_last == (void *)(head)) \ + (head)->cqh_last = (elm); \ + else \ + (head)->cqh_first->field.cqe_prev = (elm); \ + (head)->cqh_first = (elm); \ +} while (/*CONSTCOND*/0) + +#define CIRCLEQ_INSERT_TAIL(head, elm, field) do { \ + (elm)->field.cqe_next = (void *)(head); \ + (elm)->field.cqe_prev = (head)->cqh_last; \ + if ((head)->cqh_first == (void *)(head)) \ + (head)->cqh_first = (elm); \ + else \ + (head)->cqh_last->field.cqe_next = (elm); \ + (head)->cqh_last = (elm); \ +} while (/*CONSTCOND*/0) + +#define CIRCLEQ_REMOVE(head, elm, field) do { \ + if ((elm)->field.cqe_next == (void *)(head)) \ + (head)->cqh_last = (elm)->field.cqe_prev; \ + else \ + (elm)->field.cqe_next->field.cqe_prev = \ + (elm)->field.cqe_prev; \ + if ((elm)->field.cqe_prev == (void *)(head)) \ + (head)->cqh_first = (elm)->field.cqe_next; \ + else \ + (elm)->field.cqe_prev->field.cqe_next = \ + (elm)->field.cqe_next; \ +} while (/*CONSTCOND*/0) + +#define CIRCLEQ_FOREACH (var, head, field) \ + for ((var) = ((head)->cqh_first); \ + (var) != (const void *)(head); \ + (var) = ((var)->field.cqe_next)) + +#define CIRCLEQ_FOREACH_REVERSE (var, head, field) \ + for ((var) = ((head)->cqh_last); \ + (var) != (const void *)(head); \ + (var) = ((var)->field.cqe_prev)) + +/* +* Circular queue access methods. +*/ +#define CIRCLEQ_EMPTY (head) ((head)->cqh_first == (void *)(head)) +#define CIRCLEQ_FIRST (head) ((head)->cqh_first) +#define CIRCLEQ_LAST (head) ((head)->cqh_last) +#define CIRCLEQ_NEXT (elm, field) ((elm)->field.cqe_next) +#define CIRCLEQ_PREV (elm, field) ((elm)->field.cqe_prev) + +#define CIRCLEQ_LOOP_NEXT (head, elm, field) \ + (((elm)->field.cqe_next == (void *)(head)) \ + ? ((head)->cqh_first) \ + : (elm->field.cqe_next)) +#define CIRCLEQ_LOOP_PREV (head, elm, field) \ + (((elm)->field.cqe_prev == (void *)(head)) \ + ? ((head)->cqh_last) \ + : (elm->field.cqe_prev)) + +#endif /* !_SYS_QUEUE_H_ */
Signature · 1 line
1.5.4.1
Hi,
Am 29.07.2008 um 17:05 schrieb Gerd Hoffmann:
Quoted 3 lines
This patch updates the list implementation(s) in
audio/sys-queue.hby grabbing a fresh copy form netbsd and stripping it down a bit. Gives us a few more useful macros for list manipulation and traversal.
[...]
Quoted 6 lines
- got recent copy from netbsd.
- deleted debug code.
- deleted some list implementations, left in only the ones which qemu already has.Signed-off-by Gerd Hoffmann <[email protected]>
If you're replacing the whole file, wouldn't it make sense to move it out of audio/?
Andreas
Quoted 2 lines · Andreas Färber, le Tue 29 Jul 2008 17:19:35 +0200, a écrit :
If you're replacing the whole file, wouldn't it make sense to move it out of audio/?
I strongly vote for that :)
Samuel
Quoted 13 lines · Andreas Färber
Hi,
Am 29.07.2008 um 17:05 schrieb Gerd Hoffmann:
Quoted 3 lines
This patch updates the list implementation(s) in
audio/sys-queue.hby grabbing a fresh copy form netbsd and stripping it down a bit. Gives us a few more useful macros for list manipulation and traversal.[...]
Quoted 5 lines
- got recent copy from netbsd.
- deleted debug code.
- deleted some list implementations, left in only the ones which qemu already has.
Quoted 4 lines
Quoted 1 line
Signed-off-by Gerd Hoffmann <[email protected]>If you're replacing the whole file, wouldn't it make sense to move it out of audio/?
Good point.
Next problem: Where should it be moved to? Unfortunaly qemu hasn't a dedicated include directory. Should I create one, so we can start cleaning up the current include mess? Or just drop it into the toplevel directory?
cheers,
Gerd
Signature · 1 line
http://kraxel.fedorapeople.org/xenner/
Quoted 8 lines · Andreas Färber
Hi,
Am 29.07.2008 um 17:05 schrieb Gerd Hoffmann:
Quoted 3 lines
This patch updates the list implementation(s) in
audio/sys-queue.hby grabbing a fresh copy form netbsd and stripping it down a bit. Gives us a few more useful macros for list manipulation and traversal.[...]
Quoted 8 lines
Quoted 6 lines
- got recent copy from netbsd.
- deleted debug code.
- deleted some list implementations, left in only the ones which qemu already has.Signed-off-by Gerd Hoffmann <[email protected]>If you're replacing the whole file, wouldn't it make sense to move it out of audio/?
I'll do this in svn so we can keep revision history.
Regards,
Anthony Liguori
Quoted 4 lines
Andreas