GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: usr.bin/make/lst.lib/lstAppend.c Lines: 18 19 94.7 %
Date: 2017-11-07 Branches: 4 6 66.7 %

Line Branch Exec Source
1
/*	$OpenBSD: lstAppend.c,v 1.21 2015/01/13 18:30:15 espie Exp $	*/
2
/*	$NetBSD: lstAppend.c,v 1.5 1996/11/06 17:59:31 christos Exp $	*/
3
4
/*
5
 * Copyright (c) 1988, 1989, 1990, 1993
6
 *	The Regents of the University of California.  All rights reserved.
7
 *
8
 * This code is derived from software contributed to Berkeley by
9
 * Adam de Boor.
10
 *
11
 * Redistribution and use in source and binary forms, with or without
12
 * modification, are permitted provided that the following conditions
13
 * are met:
14
 * 1. Redistributions of source code must retain the above copyright
15
 *    notice, this list of conditions and the following disclaimer.
16
 * 2. Redistributions in binary form must reproduce the above copyright
17
 *    notice, this list of conditions and the following disclaimer in the
18
 *    documentation and/or other materials provided with the distribution.
19
 * 3. Neither the name of the University nor the names of its contributors
20
 *    may be used to endorse or promote products derived from this software
21
 *    without specific prior written permission.
22
 *
23
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
24
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
27
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33
 * SUCH DAMAGE.
34
 */
35
36
/*-
37
 * LstAppend.c --
38
 *	Add a new node with a new datum after an existing node
39
 */
40
41
#include "lstInt.h"
42
#include <sys/types.h>
43
#include <stddef.h>
44
#include "memory.h"
45
46
/*-
47
 *-----------------------------------------------------------------------
48
 * Lst_Append --
49
 *	Create a new node and add it to the given list after the given node.
50
 *
51
 * Side Effects:
52
 *	A new ListNode is created and linked in to the List. The lastPtr
53
 *	field of the List will be altered if ln is the last node in the
54
 *	list. lastPtr and firstPtr will alter if the list was empty and
55
 *	ln was NULL.
56
 *
57
 *-----------------------------------------------------------------------
58
 */
59
void
60
Lst_Append(Lst l, LstNode after, void *d)
61
{
62
	LstNode	nLNode;
63
64
4074
	PAlloc(nLNode, LstNode);
65
2037
	nLNode->datum = d;
66
67
2037
	nLNode->prevPtr = after;
68
2037
	nLNode->nextPtr = after->nextPtr;
69
70
2037
	after->nextPtr = nLNode;
71
2037
	if (nLNode->nextPtr != NULL)
72
		nLNode->nextPtr->prevPtr = nLNode;
73
74
2037
	if (after == l->lastPtr)
75
2037
		l->lastPtr = nLNode;
76
2037
}
77
78
void
79
Lst_AtEnd(Lst l, void *d)
80
{
81
	LstNode	ln;
82
83
114888832
	PAlloc(ln, LstNode);
84
57444416
	ln->datum = d;
85
86
57444416
	ln->prevPtr = l->lastPtr;
87
57444416
	ln->nextPtr = NULL;
88
57444416
	if (l->lastPtr == NULL)
89
14120135
		l->firstPtr = ln;
90
	else
91
43324281
		l->lastPtr->nextPtr = ln;
92
57444416
	l->lastPtr = ln;
93
57444416
}