|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1988, 1989, 1990 The Regents of the University of California. ! 3: * All rights reserved. ! 4: * ! 5: * This code is derived from software contributed to Berkeley by ! 6: * Adam de Boor. ! 7: * ! 8: * Redistribution and use in source and binary forms are permitted ! 9: * provided that: (1) source distributions retain this entire copyright ! 10: * notice and comment, and (2) distributions including binaries display ! 11: * the following acknowledgement: ``This product includes software ! 12: * developed by the University of California, Berkeley and its contributors'' ! 13: * in the documentation or other materials provided with the distribution ! 14: * and in all advertising materials mentioning features or use of this ! 15: * software. Neither the name of the University nor the names of its ! 16: * contributors may be used to endorse or promote products derived ! 17: * from this software without specific prior written permission. ! 18: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR ! 19: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED ! 20: * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ! 21: */ ! 22: ! 23: #ifndef lint ! 24: static char sccsid[] = "@(#)lstAppend.c 5.3 (Berkeley) 6/1/90"; ! 25: #endif /* not lint */ ! 26: ! 27: /*- ! 28: * LstAppend.c -- ! 29: * Add a new node with a new datum after an existing node ! 30: */ ! 31: ! 32: #include "lstInt.h" ! 33: ! 34: /*- ! 35: *----------------------------------------------------------------------- ! 36: * Lst_Append -- ! 37: * Create a new node and add it to the given list after the given node. ! 38: * ! 39: * Results: ! 40: * SUCCESS if all went well. ! 41: * ! 42: * Side Effects: ! 43: * A new ListNode is created and linked in to the List. The lastPtr ! 44: * field of the List will be altered if ln is the last node in the ! 45: * list. lastPtr and firstPtr will alter if the list was empty and ! 46: * ln was NILLNODE. ! 47: * ! 48: *----------------------------------------------------------------------- ! 49: */ ! 50: ReturnStatus ! 51: Lst_Append (l, ln, d) ! 52: Lst l; /* affected list */ ! 53: LstNode ln; /* node after which to append the datum */ ! 54: ClientData d; /* said datum */ ! 55: { ! 56: register List list; ! 57: register ListNode lNode; ! 58: register ListNode nLNode; ! 59: ! 60: if (LstValid (l) && (ln == NILLNODE && LstIsEmpty (l))) { ! 61: goto ok; ! 62: } ! 63: ! 64: if (!LstValid (l) || LstIsEmpty (l) || ! LstNodeValid (ln, l)) { ! 65: return (FAILURE); ! 66: } ! 67: ok: ! 68: ! 69: list = (List)l; ! 70: lNode = (ListNode)ln; ! 71: ! 72: PAlloc (nLNode, ListNode); ! 73: nLNode->datum = d; ! 74: nLNode->useCount = nLNode->flags = 0; ! 75: ! 76: if (lNode == NilListNode) { ! 77: if (list->isCirc) { ! 78: nLNode->nextPtr = nLNode->prevPtr = nLNode; ! 79: } else { ! 80: nLNode->nextPtr = nLNode->prevPtr = NilListNode; ! 81: } ! 82: list->firstPtr = list->lastPtr = nLNode; ! 83: } else { ! 84: nLNode->prevPtr = lNode; ! 85: nLNode->nextPtr = lNode->nextPtr; ! 86: ! 87: lNode->nextPtr = nLNode; ! 88: if (nLNode->nextPtr != NilListNode) { ! 89: nLNode->nextPtr->prevPtr = nLNode; ! 90: } ! 91: ! 92: if (lNode == list->lastPtr) { ! 93: list->lastPtr = nLNode; ! 94: } ! 95: } ! 96: ! 97: return (SUCCESS); ! 98: } ! 99:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.