Files
seta75D d6fe8fe829 Init
2021-10-11 22:19:34 -03:00

149 lines
4.5 KiB
C

/*
* COMPONENT_NAME: BLDPROCESS
*
* FUNCTIONS: Lst_Insert
*
* ORIGINS: 27,71
*
* This module contains IBM CONFIDENTIAL code. -- (IBM
* Confidential Restricted when combined with the aggregated
* modules for this product)
* SOURCE MATERIALS
*
* (C) COPYRIGHT International Business Machines Corp. 1994
* All Rights Reserved
* US Government Users Restricted Rights - Use, duplication or
* disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
*/
/*
* @OSF_FREE_COPYRIGHT@
* COPYRIGHT NOTICE
* Copyright (c) 1992, 1991, 1990
* Open Software Foundation, Inc.
*
* Permission is hereby granted to use, copy, modify and freely distribute
* the software in this file and its documentation for any purpose without
* fee, provided that the above copyright notice appears in all copies and
* that both the copyright notice and this permission notice appear in
* supporting documentation. Further, provided that the name of Open
* Software Foundation, Inc. ("OSF") not be used in advertising or
* publicity pertaining to distribution of the software without prior
* written permission from OSF. OSF makes no representations about the
* suitability of this software for any purpose. It is provided "as is"
* without express or implied warranty.
*/
/*
* HISTORY
* $Log: lstInsert.c,v $
* Revision 1.2.2.3 1992/12/03 19:06:24 damon
* ODE 2.2 CR 346. Expanded copyright
* [1992/12/03 18:35:54 damon]
*
* Revision 1.2.2.2 1992/09/24 19:25:46 gm
* CR286: Major improvements to make internals.
* [1992/09/24 17:57:30 gm]
*
* Revision 1.2 1991/12/05 20:43:51 devrcs
* Changes for parallel make.
* [91/04/21 16:37:57 gm]
*
* Changes for Reno make
* [91/03/22 16:05:12 mckeen]
*
* $EndLog$
*/
/*
* Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
* All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* Adam de Boor.
*
* Redistribution and use in source and binary forms are permitted
* provided that: (1) source distributions retain this entire copyright
* notice and comment, and (2) distributions including binaries display
* the following acknowledgement: ``This product includes software
* developed by the University of California, Berkeley and its contributors''
* in the documentation or other materials provided with the distribution
* and in all advertising materials mentioning features or use of this
* software. Neither the name of the University nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
#ifndef lint
static char sccsid[] = "@(#)78 1.4 src/bldenv/make/lst.lib/lstInsert.c, bldprocess, bos412, GOLDA411a 1/19/94 16:29:22";
#endif /* not lint */
#ifndef lint
static char rcsid[] = "@(#)lstInsert.c 5.3 (Berkeley) 6/1/90";
#endif /* not lint */
/*-
* LstInsert.c --
* Insert a new datum before an old one
*/
#include "lstInt.h"
/*-
*-----------------------------------------------------------------------
* Lst_Insert --
* Insert a new node with the given piece of data before the given
* node in the given list.
*
* Results:
* SUCCESS or FAILURE.
*
* Side Effects:
* the firstPtr field will be changed if ln is the first node in the
* list.
*
*-----------------------------------------------------------------------
*/
ReturnStatus
Lst_Insert (l, ln, d)
Lst l; /* list to manipulate */
LstNode ln; /* node before which to insert d */
ClientData d; /* datum to be inserted */
{
register ListNode nLNode; /* new lnode for d */
register ListNode lNode = (ListNode)ln;
register List list = (List)l;
/*
* check validity of arguments
*/
if ((ln == NilListNode) ^ (Lst_IsEmpty (l)))
return (FAILURE);
nLNode = PAllocNode ();
nLNode->datum = d;
nLNode->useCount = nLNode->flags = 0;
if (ln == NILLNODE) {
nLNode->prevPtr = nLNode->nextPtr = NilListNode;
list->firstPtr = list->lastPtr = nLNode;
} else {
nLNode->prevPtr = lNode->prevPtr;
nLNode->nextPtr = lNode;
if (nLNode->prevPtr != NilListNode) {
nLNode->prevPtr->nextPtr = nLNode;
}
lNode->prevPtr = nLNode;
if (lNode == list->firstPtr) {
list->firstPtr = nLNode;
}
}
list->numNodes++;
return (SUCCESS);
}