Module Name: src Committed By: christos Date: Tue Nov 26 01:27:46 UTC 2013
Modified Files: src/sys/sys: queue.h Log Message: Provide TAILQ_REPLACE for tmux, from FreeBSD. To generate a diff of this commit: cvs rdiff -u -r1.59 -r1.60 src/sys/sys/queue.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/sys/queue.h diff -u src/sys/sys/queue.h:1.59 src/sys/sys/queue.h:1.60 --- src/sys/sys/queue.h:1.59 Sun Nov 24 22:02:57 2013 +++ src/sys/sys/queue.h Mon Nov 25 20:27:46 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: queue.h,v 1.59 2013/11/25 03:02:57 christos Exp $ */ +/* $NetBSD: queue.h,v 1.60 2013/11/26 01:27:46 christos Exp $ */ /* * Copyright (c) 1991, 1993 @@ -556,6 +556,18 @@ struct { \ QUEUEDEBUG_TAILQ_POSTREMOVE((elm), field); \ } while (/*CONSTCOND*/0) +#define TAILQ_REPLACE(head, elm, elm2, field) do { \ + if (((elm2)->field.tqe_next = (elm)->field.tqe_next) != \ + TAILQ_END(head)) \ + (elm2)->field.tqe_next->field.tqe_prev = \ + &(elm2)->field.tqe_next; \ + else \ + (head)->tqh_last = &(elm2)->field.tqe_next; \ + (elm2)->field.tqe_prev = (elm)->field.tqe_prev; \ + *(elm2)->field.tqe_prev = (elm2); \ + QUEUEDEBUG_TAILQ_POSTREMOVE((elm), field); \ +} while (/*CONSTCOND*/0) + #define TAILQ_FOREACH(var, head, field) \ for ((var) = ((head)->tqh_first); \ (var) != TAILQ_END(head); \