@ -0,0 +1,100 @@ | |||||
.\" $OpenBSD: insque.3,v 1.1 2003/05/08 23:26:30 millert Exp $ | |||||
.\" Copyright (c) 1993 John Brezak | |||||
.\" 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. The name of the author may be used to endorse or promote products | |||||
.\" derived from this software without specific prior written permission. | |||||
.\" | |||||
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR `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 AUTHOR 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. | |||||
.\" | |||||
.\" | |||||
.Dd August 12, 1993 | |||||
.Dt INSQUE 3 | |||||
.Os | |||||
.Sh NAME | |||||
.Nm insque , | |||||
.Nm remque | |||||
.Nd insert/remove element from a queue | |||||
.Sh SYNOPSIS | |||||
.Fd #include <search.h> | |||||
.Ft void | |||||
.Fn insque "void *elem" "void *pred" | |||||
.Ft void | |||||
.Fn remque "void *elem" | |||||
.Sh DESCRIPTION | |||||
.Bf -symbolic | |||||
These interfaces have been superceded by the | |||||
.Xr queue 3 | |||||
macros and are provided for compatibility with legacy code. | |||||
.Ef | |||||
.Pp | |||||
.Fn insque | |||||
and | |||||
.Fn remque | |||||
manipulate queues built from doubly linked lists. | |||||
The queue can be either circular or linear. | |||||
Each element in the queue must be of the following form: | |||||
.Bd -literal | |||||
struct qelem { | |||||
struct qelem *q_forw; | |||||
struct qelem *q_back; | |||||
char q_data[]; | |||||
}; | |||||
.Ed | |||||
.Pp | |||||
The first two elements in the struct must be pointers of the | |||||
same type that point to the previous and next elements in | |||||
the queue respectively. | |||||
Any subsequent data in the struct is application-dependent. | |||||
.Pp | |||||
The | |||||
.Fn insque | |||||
function inserts | |||||
.Fa elem | |||||
into a queue immediately after | |||||
.Fa pred . | |||||
.Pp | |||||
The | |||||
.Fn remque | |||||
function removes | |||||
.Fa elem | |||||
from the queue. | |||||
.Sh DIAGNOSTICS | |||||
These functions are not atomic unless that machine architecture allows it. | |||||
.Sh SEE ALSO | |||||
.Xr queue 3 | |||||
.Sh STANDARDS | |||||
The | |||||
.Fn lsearch | |||||
and | |||||
.Fn lfind | |||||
functions conform to the | |||||
.St -p1003.1-01 | |||||
and | |||||
.St -xpg4.3 . | |||||
specifications. | |||||
.Sh HISTORY | |||||
The | |||||
.Fn insque | |||||
and | |||||
.Fn remque | |||||
functions are derived from the insque and remque instructions on a | |||||
.Tn VAX . |
@ -0,0 +1,52 @@ | |||||
/* $OpenBSD: insque.c,v 1.1 2003/05/08 23:26:30 millert Exp $ */ | |||||
/* | |||||
* Copyright (c) 1993 John Brezak | |||||
* 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. The name of the author may be used to endorse or promote products | |||||
* derived from this software without specific prior written permission. | |||||
* | |||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR `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 AUTHOR 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. | |||||
*/ | |||||
#if defined(LIBC_SCCS) && !defined(lint) | |||||
static char *rcsid = "$OpenBSD: insque.c,v 1.1 2003/05/08 23:26:30 millert Exp $"; | |||||
#endif /* LIBC_SCCS and not lint */ | |||||
#include <search.h> | |||||
struct qelem { | |||||
struct qelem *q_forw; | |||||
struct qelem *q_back; | |||||
}; | |||||
void | |||||
insque(void *entry, void *pred) | |||||
{ | |||||
struct qelem *e = (struct qelem *) entry; | |||||
struct qelem *p = (struct qelem *) pred; | |||||
e->q_forw = p->q_forw; | |||||
e->q_back = p; | |||||
p->q_forw->q_back = e; | |||||
p->q_forw = e; | |||||
} |
@ -0,0 +1,48 @@ | |||||
/* $OpenBSD: remque.c,v 1.1 2003/05/08 23:26:30 millert Exp $ */ | |||||
/* | |||||
* Copyright (c) 1993 John Brezak | |||||
* 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. The name of the author may be used to endorse or promote products | |||||
* derived from this software without specific prior written permission. | |||||
* | |||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR `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 AUTHOR 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. | |||||
*/ | |||||
#if defined(LIBC_SCCS) && !defined(lint) | |||||
static char *rcsid = "$OpenBSD: remque.c,v 1.1 2003/05/08 23:26:30 millert Exp $"; | |||||
#endif /* LIBC_SCCS and not lint */ | |||||
#include <search.h> | |||||
struct qelem { | |||||
struct qelem *q_forw; | |||||
struct qelem *q_back; | |||||
}; | |||||
void | |||||
remque(void *element) | |||||
{ | |||||
struct qelem *e = (struct qelem *) element; | |||||
e->q_forw->q_back = e->q_back; | |||||
e->q_back->q_forw = e->q_forw; | |||||
} |