diff options
author | Marc Espie <espie@cvs.openbsd.org> | 2008-01-12 13:05:58 +0000 |
---|---|---|
committer | Marc Espie <espie@cvs.openbsd.org> | 2008-01-12 13:05:58 +0000 |
commit | 6213474ecb692248944a72b77eadf3f344f5c54b (patch) | |
tree | dbddef6b10b393c60826ef0a091a95a76934f72d /usr.bin/make | |
parent | 051804cde8f7cf92912ae93a8c6e3c8e56bacd5f (diff) |
new function: lstRequeue, to be used by the job handler
Diffstat (limited to 'usr.bin/make')
-rw-r--r-- | usr.bin/make/Makefile | 4 | ||||
-rw-r--r-- | usr.bin/make/lst.lib/lstRequeue.c | 54 |
2 files changed, 56 insertions, 2 deletions
diff --git a/usr.bin/make/Makefile b/usr.bin/make/Makefile index e00ab66a31d..e92d5eb048e 100644 --- a/usr.bin/make/Makefile +++ b/usr.bin/make/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.48 2007/10/23 22:04:24 miod Exp $ +# $OpenBSD: Makefile,v 1.49 2008/01/12 13:05:57 espie Exp $ PROG= make CFLAGS+= -I${.OBJDIR} -I${.CURDIR} @@ -21,7 +21,7 @@ SRCS= arch.c buf.c cmd_exec.c compat.c cond.c dir.c direxpand.c engine.c \ var.c varmodifiers.c varname.c SRCS+= lstAddNew.c lstAppend.c lstConcat.c lstConcatDestroy.c \ lstDeQueue.c lstDestroy.c lstDupl.c lstFindFrom.c lstForEachFrom.c \ - lstInsert.c lstMember.c lstRemove.c lstReplace.c lstSucc.c + lstInsert.c lstMember.c lstRemove.c lstReplace.c lstRequeue.c lstSucc.c .PATH: ${.CURDIR}/lst.lib CLEANFILES+=generate generate.o regress.o check diff --git a/usr.bin/make/lst.lib/lstRequeue.c b/usr.bin/make/lst.lib/lstRequeue.c new file mode 100644 index 00000000000..542f7ae6297 --- /dev/null +++ b/usr.bin/make/lst.lib/lstRequeue.c @@ -0,0 +1,54 @@ +/* $OpenBSD: lstRequeue.c,v 1.1 2008/01/12 13:05:57 espie Exp $ */ +/* + * Copyright (c) 2008 Marc Espie. + * + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE OPENBSD PROJECT AND CONTRIBUTORS + * ``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 OPENBSD + * PROJECT OR CONTRIBUTORS 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. + */ +#include "lstInt.h" +#include <stdlib.h> + + +/* Lst_Requeue(l, ln): takes node ln from the list and requeue it at front. + */ +void +Lst_Requeue(Lst l, LstNode ln) +{ + + /* already at front */ + if (l->firstPtr == ln) + return; + /* unlink element */ + if (ln->nextPtr != NULL) + ln->nextPtr->prevPtr = ln->prevPtr; + if (ln->prevPtr != NULL) + ln->prevPtr->nextPtr = ln->nextPtr; + + if (l->lastPtr == ln) + l->lastPtr = ln->prevPtr; + + /* relink at front */ + ln->nextPtr = l->firstPtr; + ln->prevPtr = NULL; + l->firstPtr->prevPtr = ln; + l->firstPtr = ln; +} + |