Get rid of the sequential access feature of the lists. This was
authorMax Okumoto <okumoto@dragonflybsd.org>
Fri, 17 Dec 2004 07:56:08 +0000 (07:56 +0000)
committerMax Okumoto <okumoto@dragonflybsd.org>
Fri, 17 Dec 2004 07:56:08 +0000 (07:56 +0000)
used only in a couple of places and all of them except for one were
easily converted to use Lst_First/Lst_Succ. The one place is
compatibility mode in job.c where the it was used to advance to the
next command on each invocation of JobStart. For this case add a
pointer to the node to hold the currently executed command.

Take-from: FreeBSD
Author: harti

15 files changed:
usr.bin/make/Makefile
usr.bin/make/arch.c
usr.bin/make/dir.c
usr.bin/make/job.c
usr.bin/make/lst.h
usr.bin/make/lst.lib/lstClose.c [deleted file]
usr.bin/make/lst.lib/lstInit.c
usr.bin/make/lst.lib/lstIsAtEnd.c [deleted file]
usr.bin/make/lst.lib/lstNext.c [deleted file]
usr.bin/make/lst.lib/lstOpen.c [deleted file]
usr.bin/make/lst.lib/lstRemove.c
usr.bin/make/make.c
usr.bin/make/make.h
usr.bin/make/suff.c
usr.bin/make/targ.c

index b899884..40de7bb 100644 (file)
@@ -1,14 +1,14 @@
 #      @(#)Makefile    5.2 (Berkeley) 12/28/90
 # $FreeBSD: src/usr.bin/make/Makefile,v 1.13.2.1 2001/05/25 08:33:40 sobomax Exp $
-# $DragonFly: src/usr.bin/make/Makefile,v 1.13 2004/12/10 01:03:46 okumoto Exp $
+# $DragonFly: src/usr.bin/make/Makefile,v 1.14 2004/12/17 07:56:08 okumoto Exp $
 
 PROG=  make
 CFLAGS+=-I${.CURDIR}
 SRCS=  arch.c buf.c compat.c cond.c dir.c for.c hash.c job.c main.c \
        make.c parse.c str.c suff.c targ.c util.c var.c var_modify.c
-SRCS+= lstAppend.c lstClose.c lstConcat.c lstDeQueue.c lstDestroy.c \
+SRCS+= lstAppend.c lstConcat.c lstDeQueue.c lstDestroy.c \
        lstDupl.c lstFindFrom.c lstForEachFrom.c lstInit.c lstInsert.c \
-       lstIsAtEnd.c lstMember.c lstNext.c lstOpen.c lstRemove.c
+       lstMember.c lstRemove.c
 .PATH: ${.CURDIR}/lst.lib
 
 WARNS?=        3
index 1f2858d..ccdab89 100644 (file)
@@ -37,7 +37,7 @@
  *
  * @(#)arch.c  8.2 (Berkeley) 1/2/94
  * $FreeBSD: src/usr.bin/make/arch.c,v 1.15.2.1 2001/02/13 03:13:57 will Exp $
- * $DragonFly: src/usr.bin/make/arch.c,v 1.19 2004/12/17 07:53:57 okumoto Exp $
+ * $DragonFly: src/usr.bin/make/arch.c,v 1.20 2004/12/17 07:56:08 okumoto Exp $
  */
 
 /*-
@@ -1017,11 +1017,7 @@ Arch_MemMTime(GNode *gn)
     char         *nameStart,
                  *nameEnd;
 
-    if (Lst_Open(gn->parents) != SUCCESS) {
-       gn->mtime = 0;
-       return (0);
-    }
-    while ((ln = Lst_Next(gn->parents)) != NULL) {
+    for (ln = Lst_First(gn->parents); ln != NULL; ln = Lst_Succ(ln)) {
        pgn = Lst_Datum(ln);
 
        if (pgn->type & OP_ARCHV) {
@@ -1048,9 +1044,6 @@ Arch_MemMTime(GNode *gn)
            break;
        }
     }
-
-    Lst_Close(gn->parents);
-
     return (gn->mtime);
 }
 
index 3c506b6..e752f78 100644 (file)
@@ -38,7 +38,7 @@
  *
  * @(#)dir.c   8.2 (Berkeley) 1/2/94
  * $$FreeBSD: src/usr.bin/make/dir.c,v 1.10.2.2 2003/10/08 08:14:22 ru Exp $
- * $DragonFly: src/usr.bin/make/dir.c,v 1.23 2004/12/17 07:53:57 okumoto Exp $
+ * $DragonFly: src/usr.bin/make/dir.c,v 1.24 2004/12/17 07:56:08 okumoto Exp $
  */
 
 /*-
@@ -505,15 +505,9 @@ static void
 DirExpandInt(const char *word, Lst *path, Lst *expansions)
 {
        LstNode *ln;        /* Current node */
-       Path *p;            /* Directory in the node */
 
-       if (Lst_Open(path) == SUCCESS) {
-               while ((ln = Lst_Next(path)) != NULL) {
-                       p = Lst_Datum(ln);
-                       DirMatchFiles(word, p, expansions);
-               }
-               Lst_Close(path);
-       }
+       for (ln = Lst_First(path); ln != NULL; ln = Lst_Succ(ln))
+               DirMatchFiles(word, (Path *)Lst_Datum(ln), expansions);
 }
 
 /*-
@@ -715,12 +709,6 @@ Dir_FindFile(char *name, Lst *path)
                return (estrdup(name));
        }
 
-       if (Lst_Open(path) == FAILURE) {
-               DEBUGF(DIR, ("couldn't open path, file not found\n"));
-               misses += 1;
-               return (NULL);
-       }
-
        /*
         * We look through all the directories on the path seeking one which
         * contains the final component of the given name and whose final
@@ -729,7 +717,7 @@ Dir_FindFile(char *name, Lst *path)
         * and return the resulting string. If we don't find any such thing,
         * we go on to phase two...
         */
-       while ((ln = Lst_Next(path)) != NULL) {
+       for (ln = Lst_First(path); ln != NULL; ln = Lst_Succ(ln)) {
                p = Lst_Datum(ln);
                DEBUGF(DIR, ("%s...", p->name));
                if (Hash_FindEntry(&p->files, cp) != NULL) {
@@ -760,7 +748,6 @@ Dir_FindFile(char *name, Lst *path)
                        }
                        file = str_concat(p->name, cp, STR_ADDSLASH);
                        DEBUGF(DIR, ("returning %s\n", file));
-                       Lst_Close(path);
                        p->hits += 1;
                        hits += 1;
                        return (file);
@@ -775,7 +762,6 @@ Dir_FindFile(char *name, Lst *path)
                            p1++, p2++)
                                continue;
                        if (*p1 == '\0' && p2 == cp - 1) {
-                               Lst_Close(path);
                                if (*cp == '\0' || ISDOT(cp) || ISDOTDOT(cp)) {
                                        DEBUGF(DIR, ("returning %s\n", name));
                                        return (estrdup(name));
@@ -810,8 +796,7 @@ Dir_FindFile(char *name, Lst *path)
                Boolean checkedDot = FALSE;
 
                DEBUGF(DIR, ("failed. Trying subdirectories..."));
-               Lst_Open(path);
-               while ((ln = Lst_Next(path)) != NULL) {
+               for (ln = Lst_First(path); ln != NULL; ln = Lst_Succ(ln)) {
                        p = Lst_Datum(ln);
                        if (p != dot) {
                                file = str_concat(p->name, name, STR_ADDSLASH);
@@ -828,8 +813,6 @@ Dir_FindFile(char *name, Lst *path)
                        if (stat(file, &stb) == 0) {
                                DEBUGF(DIR, ("got it.\n"));
 
-                               Lst_Close(path);
-
                                /*
                                 * We've found another directory to search. We
                                 * know there's a slash in 'file' because we put
@@ -866,7 +849,6 @@ Dir_FindFile(char *name, Lst *path)
                }
 
                DEBUGF(DIR, ("failed. "));
-               Lst_Close(path);
 
                if (checkedDot) {
                        /*
@@ -1119,16 +1101,13 @@ Dir_MakeFlags(char *flag, Lst *path)
 
        str = estrdup("");
 
-       if (Lst_Open(path) == SUCCESS) {
-               while ((ln = Lst_Next(path)) != NULL) {
-                       p = Lst_Datum(ln);
-                       tstr = str_concat(flag, p->name, 0);
-                       nstr = str_concat(str, tstr, STR_ADDSPACE);
-                       free(str);
-                       free(tstr);
-                       str = nstr;
-               }
-               Lst_Close(path);
+       for (ln = Lst_First(path); ln != NULL; ln = Lst_Succ(ln)) {
+               p = Lst_Datum(ln);
+               tstr = str_concat(flag, p->name, 0);
+               nstr = str_concat(str, tstr, STR_ADDSPACE);
+               free(str);
+               free(tstr);
+               str = nstr;
        }
 
        return (str);
@@ -1236,13 +1215,9 @@ Dir_PrintDirectories(void)
            (hits + bigmisses + nearmisses ?
            hits * 100 / (hits + bigmisses + nearmisses) : 0));
        printf("# %-20s referenced\thits\n", "directory");
-       if (Lst_Open(openDirectories) == SUCCESS) {
-               while ((ln = Lst_Next(openDirectories)) != NULL) {
-                       p = Lst_Datum(ln);
-                       printf("# %-20s %10d\t%4d\n", p->name, p->refCount,
-                           p->hits);
-               }
-               Lst_Close(openDirectories);
+       for (ln = Lst_First(openDirectories); ln != NULL; ln = Lst_Succ(ln)) {
+               p = Lst_Datum(ln);
+               printf("# %-20s %10d\t%4d\n", p->name, p->refCount, p->hits);
        }
 }
 
index 88cd405..c8bd4f7 100644 (file)
@@ -38,7 +38,7 @@
  *
  * @(#)job.c   8.2 (Berkeley) 3/19/94
  * $FreeBSD: src/usr.bin/make/job.c,v 1.17.2.2 2001/02/13 03:13:57 will Exp $
- * $DragonFly: src/usr.bin/make/job.c,v 1.32 2004/12/17 07:53:57 okumoto Exp $
+ * $DragonFly: src/usr.bin/make/job.c,v 1.33 2004/12/17 07:56:08 okumoto Exp $
  */
 
 #ifndef OLD_JOKE
@@ -843,8 +843,8 @@ JobFinish(Job *job, int *status)
      * try and restart the job on the next command. If JobStart says it's
      * ok, it's ok. If there's an error, this puppy is done.
      */
-    if (compatMake && (WIFEXITED(*status) &&
-       !Lst_IsAtEnd(job->node->commands))) {
+    if (compatMake && WIFEXITED(*status) &&
+       Lst_Succ(job->node->compat_command) != NULL) {
        switch (JobStart(job->node, job->flags & JOB_IGNDOTS, job)) {
        case JOB_RUNNING:
            done = FALSE;
@@ -1460,31 +1460,28 @@ JobStart(GNode *gn, int flags, Job *previous)
             * and print it to the command file. If the command was an
             * ellipsis, note that there's nothing more to execute.
             */
-           if ((job->flags&JOB_FIRST) && (Lst_Open(gn->commands) != SUCCESS)){
-               cmdsOK = FALSE;
-           } else {
-               LstNode *ln = Lst_Next(gn->commands);
+           if (job->flags & JOB_FIRST)
+               gn->compat_command = Lst_First(gn->commands);
+           else
+               gn->compat_command = Lst_Succ(gn->compat_command);
 
-               if ((ln == NULL) ||
-                   JobPrintCommand(Lst_Datum(ln), job))
-               {
-                   noExec = TRUE;
-                   Lst_Close(gn->commands);
-               }
-               if (noExec && !(job->flags & JOB_FIRST)) {
-                   /*
-                    * If we're not going to execute anything, the job
-                    * is done and we need to close down the various
-                    * file descriptors we've opened for output, then
-                    * call JobDoOutput to catch the final characters or
-                    * send the file to the screen... Note that the i/o streams
-                    * are only open if this isn't the first job.
-                    * Note also that this could not be done in
-                    * Job_CatchChildren b/c it wasn't clear if there were
-                    * more commands to execute or not...
-                    */
-                   JobClose(job);
-               }
+           if (gn->compat_command == NULL ||
+               JobPrintCommand(Lst_Datum(gn->compat_command), job))
+               noExec = TRUE;
+
+           if (noExec && !(job->flags & JOB_FIRST)) {
+               /*
+                * If we're not going to execute anything, the job
+                * is done and we need to close down the various
+                * file descriptors we've opened for output, then
+                * call JobDoOutput to catch the final characters or
+                * send the file to the screen... Note that the i/o streams
+                * are only open if this isn't the first job.
+                * Note also that this could not be done in
+                * Job_CatchChildren b/c it wasn't clear if there were
+                * more commands to execute or not...
+                */
+                JobClose(job);
            }
        } else {
            /*
@@ -2031,17 +2028,13 @@ Job_CatchOutput(int flag)
            if (--nfds <= 0)
                return;
        }
-       if (Lst_Open(jobs) == FAILURE) {
-           Punt("Cannot open job table");
-       }
-       while (nfds && (ln = Lst_Next(jobs)) != NULL) {
+       for (ln = Lst_First(jobs); nfds != 0 && ln != NULL; ln = Lst_Succ(ln)) {
            job = Lst_Datum(ln);
            if (FD_ISSET(job->inPipe, &readfds)) {
                JobDoOutput(job, FALSE);
                nfds -= 1;
            }
        }
-       Lst_Close(jobs);
 #endif /* !USE_KQUEUE */
     }
 }
@@ -2614,13 +2607,12 @@ static void
 JobInterrupt(int runINTERRUPT, int signo)
 {
     LstNode      *ln;          /* element in job table */
-    Job           *job = NULL; /* job descriptor in that element */
+    Job           *job;                /* job descriptor in that element */
     GNode         *interrupt;  /* the node describing the .INTERRUPT target */
 
     aborting = ABORT_INTERRUPT;
 
-    Lst_Open(jobs);
-    while ((ln = Lst_Next(jobs)) != NULL) {
+    for (ln = Lst_First(jobs); ln != NULL; ln = Lst_Succ(ln)) {
        job = Lst_Datum(ln);
 
        if (!Targ_Precious(job->node)) {
@@ -2741,8 +2733,7 @@ Job_AbortAll(void)
     aborting = ABORT_ERROR;
 
     if (nJobs) {
-       Lst_Open(jobs);
-       while ((ln = Lst_Next(jobs)) != NULL) {
+       for (ln = Lst_First(jobs); ln != NULL; ln = Lst_Succ(ln)) {
            job = Lst_Datum(ln);
 
            /*
index 0174e53..65c999d 100644 (file)
@@ -38,7 +38,7 @@
  *
  *     from: @(#)lst.h 8.1 (Berkeley) 6/6/93
  * $FreeBSD: src/usr.bin/make/lst.h,v 1.9 1999/08/28 01:03:32 peter Exp $
- * $DragonFly: src/usr.bin/make/lst.h,v 1.14 2004/12/17 07:53:57 okumoto Exp $
+ * $DragonFly: src/usr.bin/make/lst.h,v 1.15 2004/12/17 07:56:08 okumoto Exp $
  */
 
 /*-
@@ -80,15 +80,6 @@ typedef enum {
 struct Lst {
        LstNode         *firstPtr; /* first node in list */
        LstNode         *lastPtr;  /* last node in list */
-       /*
-        * fields for sequential access
-        */
-       LstWhere        atEnd;    /* Where in the list the last access was */
-       Boolean         isOpen;   /* true if list has been Lst_Open'ed */
-       LstNode         *curPtr;  /* current node, if open. NULL if
-                                  * *just* opened */
-       LstNode         *prevPtr; /* Previous node, if open. Used by
-                                  * Lst_Remove */
 };
 typedef        struct  Lst Lst;
 
@@ -173,19 +164,6 @@ void               Lst_ForEach(Lst *, DoProc *, void *);
  * beginning of the list again.
  */
 void           Lst_ForEachFrom(Lst *, LstNode *, DoProc *, void *);
-/*
- * these functions are for dealing with a list as a table, of sorts.
- * An idea of the "current element" is kept and used by all the functions
- * between Lst_Open() and Lst_Close().
- */
-/* Open the list */
-ReturnStatus   Lst_Open(Lst *);
-/* Next element please */
-LstNode                *Lst_Next(Lst *);
-/* Done yet? */
-Boolean                Lst_IsAtEnd(Lst *);
-/* Finish table access */
-void           Lst_Close(Lst *);
 
 /*
  * for using the list as a queue
diff --git a/usr.bin/make/lst.lib/lstClose.c b/usr.bin/make/lst.lib/lstClose.c
deleted file mode 100644 (file)
index 1092279..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright (c) 1988, 1989, 1990, 1993
- *     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, 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.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. 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 BY THE REGENTS 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 REGENTS 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.
- *
- * $FreeBSD: src/usr.bin/make/lst.lib/lstClose.c,v 1.6 1999/08/28 01:03:47 peter Exp $
- * $DragonFly: src/usr.bin/make/lst.lib/Attic/lstClose.c,v 1.6 2004/12/17 00:02:57 okumoto Exp $
- *
- * @(#)lstClose.c      8.1 (Berkeley) 6/6/93
- */
-
-/*-
- * LstClose.c --
- *     Close a list for sequential access.
- *     The sequential functions access the list in a slightly different way.
- *     CurPtr points to their idea of the current node in the list and they
- *     access the list based on it. Lst_IsAtEnd must be used to determine
- *     when to stop.
- */
-
-#include "make.h"
-#include "lst.h"
-
-/*-
- *-----------------------------------------------------------------------
- * Lst_Close --
- *     Close a list which was opened for sequential access.
- *
- * Results:
- *     None.
- *
- * Arguments:
- *     l       The list to close
- *
- * Side Effects:
- *     The list is closed.
- *
- *-----------------------------------------------------------------------
- */
-void
-Lst_Close(Lst *list)
-{
-
-    if (Lst_Valid(list) == TRUE) {
-       list->isOpen = FALSE;
-       list->atEnd = LstUnknown;
-    }
-}
index d05c4e9..627cfaf 100644 (file)
@@ -34,7 +34,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/usr.bin/make/lst.lib/lstInit.c,v 1.6 1999/08/28 01:03:52 peter Exp $
- * $DragonFly: src/usr.bin/make/lst.lib/Attic/lstInit.c,v 1.7 2004/12/17 00:02:57 okumoto Exp $
+ * $DragonFly: src/usr.bin/make/lst.lib/Attic/lstInit.c,v 1.8 2004/12/17 07:56:08 okumoto Exp $
  *
  * @(#)lstInit.c       8.1 (Berkeley) 6/6/93
  */
@@ -69,8 +69,6 @@ Lst_Init(void)
 
     nList->firstPtr = NULL;
     nList->lastPtr = NULL;
-    nList->isOpen = FALSE;
-    nList->atEnd = LstUnknown;
 
     return (nList);
 }
diff --git a/usr.bin/make/lst.lib/lstIsAtEnd.c b/usr.bin/make/lst.lib/lstIsAtEnd.c
deleted file mode 100644 (file)
index 5642b1f..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (c) 1988, 1989, 1990, 1993
- *     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, 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.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. 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 BY THE REGENTS 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 REGENTS 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.
- *
- * $FreeBSD: src/usr.bin/make/lst.lib/lstIsAtEnd.c,v 1.5 1999/08/28 01:03:53 peter Exp $
- * $DragonFly: src/usr.bin/make/lst.lib/Attic/lstIsAtEnd.c,v 1.7 2004/12/17 00:02:57 okumoto Exp $
- *
- * @(#)lstIsAtEnd.c    8.1 (Berkeley) 6/6/93
- */
-
-/*-
- * LstIsAtEnd.c --
- *     Tell if the current node is at the end of the list.
- *     The sequential functions access the list in a slightly different way.
- *     CurPtr points to their idea of the current node in the list and they
- *     access the list based on it. Lst_IsAtEnd must be used to determine
- *     when to stop.
- */
-
-#include "make.h"
-#include "lst.h"
-
-/*-
- *-----------------------------------------------------------------------
- * Lst_IsAtEnd --
- *     Return true if have reached the end of the given list.
- *
- * Results:
- *     TRUE if at the end of the list (this includes the list not being
- *     open or being invalid) or FALSE if not. We return TRUE if the list
- *     is invalid or unopend so as to cause the caller to exit its loop
- *     asap, the assumption being that the loop is of the form
- *         while (!Lst_IsAtEnd (l)) {
- *               ...
- *         }
- *
- * Side Effects:
- *     None.
- *
- *-----------------------------------------------------------------------
- */
-Boolean
-Lst_IsAtEnd(Lst *list)
-{
-
-    return (!Lst_Valid(list) || !list->isOpen ||
-           (list->atEnd == LstHead) || (list->atEnd == LstTail));
-}
diff --git a/usr.bin/make/lst.lib/lstNext.c b/usr.bin/make/lst.lib/lstNext.c
deleted file mode 100644 (file)
index 1d53f27..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (c) 1988, 1989, 1990, 1993
- *     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, 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.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. 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 BY THE REGENTS 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 REGENTS 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.
- *
- * $FreeBSD: src/usr.bin/make/lst.lib/lstNext.c,v 1.6 1999/08/28 01:03:55 peter Exp $
- * $DragonFly: src/usr.bin/make/lst.lib/Attic/lstNext.c,v 1.8 2004/12/17 00:02:57 okumoto Exp $
- *
- * @(#)lstNext.c       8.1 (Berkeley) 6/6/93
- */
-
-/*-
- * LstNext.c --
- *     Return the next node for a list.
- *     The sequential functions access the list in a slightly different way.
- *     CurPtr points to their idea of the current node in the list and they
- *     access the list based on it. Lst_IsAtEnd must be used to determine
- *     when to stop.
- */
-
-#include "make.h"
-#include "lst.h"
-
-/*-
- *-----------------------------------------------------------------------
- * Lst_Next --
- *     Return the next node for the given list.
- *
- * Results:
- *     The next node or NULL if the list has yet to be opened or the end
- *     has been reached.
- *
- * Side Effects:
- *     the curPtr field is updated.
- *
- *-----------------------------------------------------------------------
- */
-LstNode *
-Lst_Next(Lst *list)
-{
-    LstNode *tln;
-
-    if ((Lst_Valid(list) == FALSE) || (list->isOpen == FALSE)) {
-           return (NULL);
-    }
-
-    list->prevPtr = list->curPtr;
-
-    if (list->curPtr == NULL) {
-       if (list->atEnd == LstUnknown) {
-           /*
-            * If we're just starting out, atEnd will be Unknown.
-            * Then we want to start this thing off in the right
-            * direction -- at the start with atEnd being Middle.
-            */
-           list->curPtr = tln = list->firstPtr;
-           list->atEnd = LstMiddle;
-       } else {
-           tln = NULL;
-           list->atEnd = LstTail;
-       }
-    } else {
-       tln = list->curPtr->nextPtr;
-       list->curPtr = tln;
-
-       if (tln == NULL) {
-           list->atEnd = LstTail;
-       } else {
-           list->atEnd = LstMiddle;
-       }
-    }
-
-    return (tln);
-}
diff --git a/usr.bin/make/lst.lib/lstOpen.c b/usr.bin/make/lst.lib/lstOpen.c
deleted file mode 100644 (file)
index 1943aaf..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 1988, 1989, 1990, 1993
- *     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, 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.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. 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 BY THE REGENTS 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 REGENTS 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.
- *
- * $FreeBSD: src/usr.bin/make/lst.lib/lstOpen.c,v 1.5 1999/08/28 01:03:56 peter Exp $
- * $DragonFly: src/usr.bin/make/lst.lib/Attic/lstOpen.c,v 1.8 2004/12/17 00:02:57 okumoto Exp $
- *
- * @(#)lstOpen.c       8.1 (Berkeley) 6/6/93
- */
-
-/*-
- * LstOpen.c --
- *     Open a list for sequential access. The sequential functions access the
- *     list in a slightly different way. CurPtr points to their idea of the
- *     current node in the list and they access the list based on it.
- *     Lst_IsAtEnd must be used to determine when to stop.
- */
-
-#include "make.h"
-#include "lst.h"
-
-/*-
- *-----------------------------------------------------------------------
- * Lst_Open --
- *     Open a list for sequential access. A list can still be searched,
- *     etc., without confusing these functions.
- *
- * Results:
- *     SUCCESS or FAILURE.
- *
- * Side Effects:
- *     isOpen is set TRUE and curPtr is set to NULL so the
- *     other sequential functions no it was just opened and can choose
- *     the first element accessed based on this.
- *
- *-----------------------------------------------------------------------
- */
-ReturnStatus
-Lst_Open(Lst *l)
-{
-
-       if (Lst_Valid(l) == FALSE) {
-               return (FAILURE);
-       }
-       l->isOpen = TRUE;
-       l->atEnd = Lst_IsEmpty(l) ? LstHead : LstUnknown;
-       l->curPtr = NULL;
-
-       return (SUCCESS);
-}
index 52ef0f2..b7e0140 100644 (file)
@@ -34,7 +34,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/usr.bin/make/lst.lib/lstRemove.c,v 1.6 1999/08/28 01:03:56 peter Exp $
- * $DragonFly: src/usr.bin/make/lst.lib/Attic/lstRemove.c,v 1.8 2004/12/17 00:02:57 okumoto Exp $
+ * $DragonFly: src/usr.bin/make/lst.lib/Attic/lstRemove.c,v 1.9 2004/12/17 07:56:08 okumoto Exp $
  *
  * @(#)lstRemove.c     8.1 (Berkeley) 6/6/93
  */
@@ -91,19 +91,6 @@ Lst_Remove(Lst *list, LstNode *ln)
        list->lastPtr = ln->prevPtr;
     }
 
-    /*
-     * Sequential access stuff. If the node we're removing is the current
-     * node in the list, reset the current node to the previous one. If the
-     * previous one was non-existent (prevPtr == NULL), we set the
-     * end to be Unknown, since it is.
-     */
-    if (list->isOpen && (list->curPtr == ln)) {
-       list->curPtr = list->prevPtr;
-       if (list->curPtr == NULL) {
-           list->atEnd = LstUnknown;
-       }
-    }
-
     /*
      * the only way firstPtr can still point to ln is if ln is the last
      * node on the list. The list is, therefore, empty and is marked as such
index ec464c2..fa8b51c 100644 (file)
@@ -37,7 +37,7 @@
  *
  * @(#)make.c  8.1 (Berkeley) 6/6/93
  * $FreeBSD: src/usr.bin/make/make.c,v 1.11 1999/09/11 13:08:01 hoek Exp $
- * $DragonFly: src/usr.bin/make/make.c,v 1.15 2004/12/17 00:02:57 okumoto Exp $
+ * $DragonFly: src/usr.bin/make/make.c,v 1.16 2004/12/17 07:56:08 okumoto Exp $
  */
 
 /*-
@@ -309,17 +309,14 @@ Make_HandleUse(GNode *cgn, GNode *pgn)
             Lst_Concat(pgn->commands, cgn->commands, LST_CONCNEW);
        }
 
-       if (Lst_Open(cgn->children) == SUCCESS) {
-           while ((ln = Lst_Next(cgn->children)) != NULL) {
-               gn = Lst_Datum(ln);
+       for (ln = Lst_First(cgn->children); ln != NULL; ln = Lst_Succ(ln)) {
+           gn = Lst_Datum(ln);
 
-               if (Lst_Member(pgn->children, gn) == NULL) {
-                   Lst_AtEnd(pgn->children, gn);
-                   Lst_AtEnd(gn->parents, pgn);
-                   pgn->unmade += 1;
-               }
+           if (Lst_Member(pgn->children, gn) == NULL) {
+               Lst_AtEnd(pgn->children, gn);
+               Lst_AtEnd(gn->parents, pgn);
+               pgn->unmade += 1;
            }
-           Lst_Close(cgn->children);
        }
 
        pgn->type |= cgn->type & ~(OP_OPMASK | OP_USE | OP_TRANSFORM);
@@ -377,6 +374,8 @@ Make_Update(GNode *cgn)
     char       *cname;         /* the child's name */
     LstNode    *ln;            /* Element in parents and iParents lists */
     char       *p1;
+    char        *ptr;
+    char       *cpref;
 
     cname = Var_Value(TARGET, cgn, &p1);
     free(p1);
@@ -446,35 +445,33 @@ Make_Update(GNode *cgn)
 #endif
     }
 
-    if (Lst_Open(cgn->parents) == SUCCESS) {
-       while ((ln = Lst_Next(cgn->parents)) != NULL) {
-           pgn = Lst_Datum(ln);
-           if (pgn->make) {
-               pgn->unmade -= 1;
-
-               if (!(cgn->type & (OP_EXEC | OP_USE))) {
-                   if (cgn->made == MADE) {
-                       pgn->childMade = TRUE;
-                       if (pgn->cmtime < cgn->mtime) {
-                           pgn->cmtime = cgn->mtime;
-                       }
-                   } else {
-                       Make_TimeStamp(pgn, cgn);
+    for (ln = Lst_First(cgn->parents); ln != NULL; ln = Lst_Succ(ln)) {
+       pgn = Lst_Datum(ln);
+       if (pgn->make) {
+           pgn->unmade -= 1;
+
+           if (!(cgn->type & (OP_EXEC | OP_USE))) {
+               if (cgn->made == MADE) {
+                   pgn->childMade = TRUE;
+                   if (pgn->cmtime < cgn->mtime) {
+                       pgn->cmtime = cgn->mtime;
                    }
+               } else {
+                   Make_TimeStamp(pgn, cgn);
                }
-               if (pgn->unmade == 0) {
-                   /*
-                    * Queue the node up -- any unmade predecessors will
-                    * be dealt with in MakeStartJobs.
-                    */
-                   Lst_EnQueue(toBeMade, pgn);
-               } else if (pgn->unmade < 0) {
-                   Error("Graph cycles through %s", pgn->name);
-               }
+           }
+           if (pgn->unmade == 0) {
+               /*
+                * Queue the node up -- any unmade predecessors will
+                * be dealt with in MakeStartJobs.
+                */
+               Lst_EnQueue(toBeMade, pgn);
+           } else if (pgn->unmade < 0) {
+               Error("Graph cycles through %s", pgn->name);
            }
        }
-       Lst_Close(cgn->parents);
     }
+
     /*
      * Deal with successor nodes. If any is marked for making and has an unmade
      * count of 0, has not been made and isn't in the examination queue,
@@ -495,20 +492,15 @@ Make_Update(GNode *cgn)
      * Set the .PREFIX and .IMPSRC variables for all the implied parents
      * of this node.
      */
-    if (Lst_Open(cgn->iParents) == SUCCESS) {
-       char    *ptr;
-       char    *cpref = Var_Value(PREFIX, cgn, &ptr);
-
-       while ((ln = Lst_Next(cgn->iParents)) != NULL) {
-           pgn = Lst_Datum (ln);
-           if (pgn->make) {
-               Var_Set(IMPSRC, cname, pgn);
-               Var_Set(PREFIX, cpref, pgn);
-           }
+    cpref = Var_Value(PREFIX, cgn, &ptr);
+    for (ln = Lst_First(cgn->iParents); ln != NULL; ln = Lst_Succ(ln)) {
+       pgn = Lst_Datum (ln);
+       if (pgn->make) {
+           Var_Set(IMPSRC, cname, pgn);
+           Var_Set(PREFIX, cpref, pgn);
        }
-       free(ptr);
-       Lst_Close(cgn->iParents);
     }
+    free(ptr);
 }
 
 /*-
index 30d0972..f704610 100644 (file)
@@ -37,7 +37,7 @@
  *
  *     from: @(#)make.h        8.3 (Berkeley) 6/13/95
  * $FreeBSD: src/usr.bin/make/make.h,v 1.12.2.2 2001/02/13 03:13:58 will Exp $
- * $DragonFly: src/usr.bin/make/make.h,v 1.13 2004/12/17 00:02:57 okumoto Exp $
+ * $DragonFly: src/usr.bin/make/make.h,v 1.14 2004/12/17 07:56:08 okumoto Exp $
  */
 
 /*-
@@ -137,6 +137,9 @@ typedef struct GNode {
     Lst            *context;   /* The local variables */
     Lst            *commands;  /* Creation commands */
 
+    /* current command executing in compat mode */
+    LstNode       *compat_command;
+
     struct _Suff    *suffix;   /* Suffix for the node (determined by
                                 * Suff_FindDeps and opaque to everyone
                                 * but the Suff module) */
index b370b2c..1a3043b 100644 (file)
@@ -37,7 +37,7 @@
  *
  * @(#)suff.c  8.4 (Berkeley) 3/21/94
  * $FreeBSD: src/usr.bin/make/suff.c,v 1.12.2.2 2004/06/10 13:07:53 ru Exp $
- * $DragonFly: src/usr.bin/make/suff.c,v 1.19 2004/12/17 07:53:57 okumoto Exp $
+ * $DragonFly: src/usr.bin/make/suff.c,v 1.20 2004/12/17 07:56:08 okumoto Exp $
  */
 
 /*-
@@ -402,23 +402,19 @@ SuffRemove(Lst *l, Suff *s)
 static void
 SuffInsert(Lst *l, Suff *s)
 {
-    LstNode      *ln;          /* current element in l we're examining */
-    Suff          *s2 = NULL;  /* the suffix descriptor in this element */
+    LstNode *ln;       /* current element in l we're examining */
+    Suff *s2;          /* the suffix descriptor in this element */
 
-    if (Lst_Open(l) == FAILURE) {
-       return;
-    }
-    while ((ln = Lst_Next(l)) != NULL) {
+    s2 = NULL;
+    for (ln = Lst_First(l); ln != NULL; ln = Lst_Succ(ln)) {
        s2 = Lst_Datum(ln);
-       if (s2->sNum >= s->sNum) {
+       if (s2->sNum >= s->sNum)
            break;
-       }
     }
     if (s2 == NULL) {
            DEBUGF(SUFF, ("inserting an empty list?..."));
     }
 
-    Lst_Close(l);
     DEBUGF(SUFF, ("inserting %s(%d)...", s->name, s->sNum));
     if (ln == NULL) {
        DEBUGF(SUFF, ("at end of list\n"));
@@ -862,14 +858,10 @@ Suff_DoPaths(void)
     Lst                *inIncludes;    /* Cumulative .INCLUDES path */
     Lst                *inLibs;        /* Cumulative .LIBS path */
 
-    if (Lst_Open(sufflist) == FAILURE) {
-       return;
-    }
-
     inIncludes = Lst_Init();
     inLibs = Lst_Init();
 
-    while ((ln = Lst_Next(sufflist)) != NULL) {
+    for (ln = Lst_First(sufflist); ln != NULL; ln = Lst_Succ(ln)) {
        s = Lst_Datum(ln);
        if (!Lst_IsEmpty(s->searchPath)) {
 #ifdef INCLUDES
@@ -896,8 +888,6 @@ Suff_DoPaths(void)
 
     Lst_Destroy(inIncludes, Dir_Destroy);
     Lst_Destroy(inLibs, Dir_Destroy);
-
-    Lst_Close(sufflist);
 }
 
 /*-
@@ -1055,6 +1045,7 @@ SuffAddLevel(Lst *l, Src *targ)
  *----------------------------------------------------------------------
  * SuffRemoveSrc --
  *     Free all src structures in list that don't have a reference count
+ *     XXX this actually frees only the first of these.
  *
  * Results:
  *     True if a src was removed
@@ -1066,21 +1057,19 @@ SuffAddLevel(Lst *l, Src *targ)
 static int
 SuffRemoveSrc(Lst *l)
 {
-    LstNode *ln;
+    LstNode *ln, *ln1;
     Src *s;
     int t = 0;
 
-    if (Lst_Open(l) == FAILURE) {
-       return (0);
-    }
 #ifdef DEBUG_SRC
     printf("cleaning %lx: ", (unsigned long) l);
     Lst_ForEach(l, PrintAddr, (void *)NULL);
     printf("\n");
 #endif
 
+    for (ln = Lst_First(l); ln != NULL; ln = ln1) {
+       ln1 = Lst_Succ(ln);
 
-    while ((ln = Lst_Next(l)) != NULL) {
        s = (Src *)Lst_Datum(ln);
        if (s->children == 0) {
            free(s->file);
@@ -1101,8 +1090,7 @@ SuffRemoveSrc(Lst *l)
            Lst_Remove(l, ln);
            free(s);
            t |= 1;
-           Lst_Close(l);
-           return TRUE;
+           return (TRUE);
        }
 #ifdef DEBUG_SRC
        else {
@@ -1113,8 +1101,6 @@ SuffRemoveSrc(Lst *l)
 #endif
     }
 
-    Lst_Close(l);
-
     return (t);
 }
 
@@ -1204,10 +1190,9 @@ SuffFindCmds (Src *targ, Lst *slst)
     char               *cp;
 
     t = targ->node;
-    Lst_Open(t->children);
     prefLen = strlen(targ->pref);
 
-    while ((ln = Lst_Next(t->children)) != NULL) {
+    for (ln = Lst_First(t->children); ln != NULL; ln = Lst_Succ(ln)) {
        s = Lst_Datum(ln);
 
        cp = strrchr(s->name, '/');
@@ -1259,7 +1244,6 @@ SuffFindCmds (Src *targ, Lst *slst)
            }
        }
     }
-    Lst_Close(t->children);
     return (NULL);
 }
 
index 8eb8f50..3cc7ae7 100644 (file)
@@ -37,7 +37,7 @@
  *
  * @(#)targ.c  8.2 (Berkeley) 3/19/94
  * $FreeBSD: src/usr.bin/make/targ.c,v 1.10 1999/09/11 13:08:02 hoek Exp $
- * $DragonFly: src/usr.bin/make/targ.c,v 1.16 2004/12/17 00:02:57 okumoto Exp $
+ * $DragonFly: src/usr.bin/make/targ.c,v 1.17 2004/12/17 07:56:08 okumoto Exp $
  */
 
 /*-
@@ -285,10 +285,7 @@ Targ_FindList(Lst *names, int flags)
 
     nodes = Lst_Init();
 
-    if (Lst_Open(names) == FAILURE) {
-       return (nodes);
-    }
-    while ((ln = Lst_Next(names)) != NULL) {
+    for (ln = Lst_First(names); ln != NULL; ln = Lst_Succ(ln)) {
        name = Lst_Datum(ln);
        gn = Targ_FindNode(name, flags);
        if (gn != NULL) {
@@ -305,7 +302,6 @@ Targ_FindList(Lst *names, int flags)
            Error("\"%s\" -- target unknown.", name);
        }
     }
-    Lst_Close(names);
     return (nodes);
 }