summaryrefslogtreecommitdiff
path: root/usr.bin/make
diff options
context:
space:
mode:
authorMarc Espie <espie@cvs.openbsd.org>2008-01-12 13:05:58 +0000
committerMarc Espie <espie@cvs.openbsd.org>2008-01-12 13:05:58 +0000
commit6213474ecb692248944a72b77eadf3f344f5c54b (patch)
treedbddef6b10b393c60826ef0a091a95a76934f72d /usr.bin/make
parent051804cde8f7cf92912ae93a8c6e3c8e56bacd5f (diff)
new function: lstRequeue, to be used by the job handler
Diffstat (limited to 'usr.bin/make')
-rw-r--r--usr.bin/make/Makefile4
-rw-r--r--usr.bin/make/lst.lib/lstRequeue.c54
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;
+}
+