xref: /titanic_44/usr/src/cmd/fm/fminject/common/inj_list.c (revision 7c478bd95313f5f23a4c958a745db2134aa03244)
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License, Version 1.0 only
6  * (the "License").  You may not use this file except in compliance
7  * with the License.
8  *
9  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10  * or http://www.opensolaris.org/os/licensing.
11  * See the License for the specific language governing permissions
12  * and limitations under the License.
13  *
14  * When distributing Covered Code, include this CDDL HEADER in each
15  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16  * If applicable, add the following below this CDDL HEADER, with the
17  * fields enclosed by brackets "[]" replaced with your own identifying
18  * information: Portions Copyright [yyyy] [name of copyright owner]
19  *
20  * CDDL HEADER END
21  */
22 /*
23  * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
24  * Use is subject to license terms.
25  */
26 
27 #pragma ident	"%Z%%M%	%I%	%E% SMI"
28 
29 #include <inj_err.h>
30 #include <inj_list.h>
31 
32 #include <assert.h>
33 #include <unistd.h>
34 
35 void
inj_list_append(inj_list_t * mlp,void * new)36 inj_list_append(inj_list_t *mlp, void *new)
37 {
38 	inj_list_t *p = mlp->ml_prev;	/* p = tail list element */
39 	inj_list_t *q = new;		/* q = new list element */
40 
41 	mlp->ml_prev = q;
42 	q->ml_prev = p;
43 	q->ml_next = NULL;
44 
45 	if (p != NULL) {
46 		assert(p->ml_next == NULL);
47 		p->ml_next = q;
48 	} else {
49 		assert(mlp->ml_next == NULL);
50 		mlp->ml_next = q;
51 	}
52 }
53 
54 void
inj_list_prepend(inj_list_t * mlp,void * new)55 inj_list_prepend(inj_list_t *mlp, void *new)
56 {
57 	inj_list_t *p = new;		/* p = new list element */
58 	inj_list_t *q = mlp->ml_next;	/* q = head list element */
59 
60 	mlp->ml_next = p;
61 	p->ml_prev = NULL;
62 	p->ml_next = q;
63 
64 	if (q != NULL) {
65 		assert(q->ml_prev == NULL);
66 		q->ml_prev = p;
67 	} else {
68 		assert(mlp->ml_prev == NULL);
69 		mlp->ml_prev = p;
70 	}
71 }
72