@ -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; | |||
} |