Module Name: othersrc
Committed By: dholland
Date: Tue Mar 5 03:32:08 UTC 2013
Modified Files:
othersrc/usr.bin/dholland-make2: arch.c compat.c cond.c dir.c dir.h
graph.h main.c make.c make.h nonints.h parse.c suff.c targ.c
Log Message:
more arrays; fewer lists.
To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 othersrc/usr.bin/dholland-make2/arch.c \
othersrc/usr.bin/dholland-make2/compat.c \
othersrc/usr.bin/dholland-make2/main.c \
othersrc/usr.bin/dholland-make2/parse.c
cvs rdiff -u -r1.3 -r1.4 othersrc/usr.bin/dholland-make2/cond.c \
othersrc/usr.bin/dholland-make2/nonints.h
cvs rdiff -u -r1.4 -r1.5 othersrc/usr.bin/dholland-make2/dir.c \
othersrc/usr.bin/dholland-make2/graph.h
cvs rdiff -u -r1.2 -r1.3 othersrc/usr.bin/dholland-make2/dir.h
cvs rdiff -u -r1.6 -r1.7 othersrc/usr.bin/dholland-make2/make.c \
othersrc/usr.bin/dholland-make2/suff.c \
othersrc/usr.bin/dholland-make2/targ.c
cvs rdiff -u -r1.8 -r1.9 othersrc/usr.bin/dholland-make2/make.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: othersrc/usr.bin/dholland-make2/arch.c
diff -u othersrc/usr.bin/dholland-make2/arch.c:1.5 othersrc/usr.bin/dholland-make2/arch.c:1.6
--- othersrc/usr.bin/dholland-make2/arch.c:1.5 Tue Mar 5 01:44:34 2013
+++ othersrc/usr.bin/dholland-make2/arch.c Tue Mar 5 03:32:08 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: arch.c,v 1.5 2013/03/05 01:44:34 dholland Exp $ */
+/* $NetBSD: arch.c,v 1.6 2013/03/05 03:32:08 dholland Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -137,7 +137,7 @@
#include "dir.h"
#include "config.h"
-MAKE_RCSID("$NetBSD: arch.c,v 1.5 2013/03/05 01:44:34 dholland Exp $");
+MAKE_RCSID("$NetBSD: arch.c,v 1.6 2013/03/05 03:32:08 dholland Exp $");
#ifdef TARGET_MACHINE
#undef MAKE_MACHINE
@@ -228,7 +228,7 @@ ArchFree(Arch *a)
*-----------------------------------------------------------------------
*/
ReturnStatus
-Arch_ParseArchive(char **linePtr, Lst nodeLst, GNode *ctxt)
+Arch_ParseArchive(char **linePtr, GList *nodeList, GNode *ctxt)
{
char *cp; /* Pointer into line */
GNode *gn; /* New node */
@@ -352,7 +352,7 @@ Arch_ParseArchive(char **linePtr, Lst no
/*
* Now form an archive spec and recurse to deal with nested
* variables and multi-word variable values.... The results
- * are just placed at the end of the nodeLst we're returning.
+ * are just placed at the end of the node list we're returning.
*/
sz = strlen(memName)+strlen(libName)+3;
buf = sacrifice = bmake_malloc(sz);
@@ -372,9 +372,9 @@ Arch_ParseArchive(char **linePtr, Lst no
return(FAILURE);
} else {
gn->type |= OP_ARCHV;
- (void)Lst_AtEnd(nodeLst, gn);
+ glist_add(nodeList, gn, NULL);
}
- } else if (Arch_ParseArchive(&sacrifice, nodeLst, ctxt)!=SUCCESS) {
+ } else if (Arch_ParseArchive(&sacrifice, nodeList, ctxt)!=SUCCESS) {
/*
* Error in nested call -- free buffer and return FAILURE
* ourselves.
@@ -387,14 +387,17 @@ Arch_ParseArchive(char **linePtr, Lst no
*/
free(buf);
} else if (Dir_HasWildcards(memName)) {
- Lst members = Lst_Init(FALSE);
- char *member;
+ struct stringarray members;
+ char *member;
+ unsigned i;
size_t sz = MAXPATHLEN, nsz;
nameBuf = bmake_malloc(sz);
- Dir_Expand(memName, &dirSearchPath, members);
- while (!Lst_IsEmpty(members)) {
- member = (char *)Lst_DeQueue(members);
+ stringarray_init(&members);
+
+ Dir_Expand(memName, &dirSearchPath, &members);
+ for (i=0; i<stringarray_num(&members); i++) {
+ member = stringarray_get(&members, i);
nsz = strlen(libName) + strlen(member) + 3;
if (sz > nsz)
nameBuf = bmake_realloc(nameBuf, sz = nsz * 2);
@@ -414,10 +417,11 @@ Arch_ParseArchive(char **linePtr, Lst no
* end of the provided list.
*/
gn->type |= OP_ARCHV;
- (void)Lst_AtEnd(nodeLst, gn);
+ glist_add(nodeList, gn, NULL);
}
}
- Lst_Destroy(members, NULL);
+ stringarray_setsize(&members, 0);
+ stringarray_cleanup(&members);
free(nameBuf);
} else {
size_t sz = strlen(libName) + strlen(memName) + 3;
@@ -436,7 +440,7 @@ Arch_ParseArchive(char **linePtr, Lst no
* provided list.
*/
gn->type |= OP_ARCHV;
- (void)Lst_AtEnd(nodeLst, gn);
+ glist_add(nodeList, gn, NULL);
}
}
if (doSubst) {
Index: othersrc/usr.bin/dholland-make2/compat.c
diff -u othersrc/usr.bin/dholland-make2/compat.c:1.5 othersrc/usr.bin/dholland-make2/compat.c:1.6
--- othersrc/usr.bin/dholland-make2/compat.c:1.5 Mon Mar 4 23:03:41 2013
+++ othersrc/usr.bin/dholland-make2/compat.c Tue Mar 5 03:32:08 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: compat.c,v 1.5 2013/03/04 23:03:41 dholland Exp $ */
+/* $NetBSD: compat.c,v 1.6 2013/03/05 03:32:08 dholland Exp $ */
/*
* Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -101,7 +101,7 @@
#include "job.h"
#include "pathnames.h"
-MAKE_RCSID("$NetBSD: compat.c,v 1.5 2013/03/04 23:03:41 dholland Exp $");
+MAKE_RCSID("$NetBSD: compat.c,v 1.6 2013/03/05 03:32:08 dholland Exp $");
/*
* The following array is used to make a fast determination of which
@@ -685,7 +685,7 @@ cohorts:
*-----------------------------------------------------------------------
*/
void
-Compat_Run(Lst targs)
+Compat_Run(GList *targs)
{
GNode *gn = NULL;/* Current root target */
int errors; /* Number of targets not remade due to errors */
@@ -739,8 +739,10 @@ Compat_Run(Lst targs)
* could not be made due to errors.
*/
errors = 0;
- while (!Lst_IsEmpty (targs)) {
- gn = (GNode *)Lst_DeQueue(targs);
+ /* XXX this should be an ordinary iteration */
+ while (glist_num(targs) > 0) {
+ gn = glist_get(targs, 0);
+ glist_remove(targs, 0);
Compat_Make(gn, gn);
if (gn->made == UPTODATE) {
Index: othersrc/usr.bin/dholland-make2/main.c
diff -u othersrc/usr.bin/dholland-make2/main.c:1.5 othersrc/usr.bin/dholland-make2/main.c:1.6
--- othersrc/usr.bin/dholland-make2/main.c:1.5 Tue Mar 5 01:44:34 2013
+++ othersrc/usr.bin/dholland-make2/main.c Tue Mar 5 03:32:08 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: main.c,v 1.5 2013/03/05 01:44:34 dholland Exp $ */
+/* $NetBSD: main.c,v 1.6 2013/03/05 03:32:08 dholland Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -128,14 +128,14 @@
MAKE_COPYRIGHT("@(#) Copyright (c) 1988, 1989, 1990, 1993\
The Regents of the University of California. All rights reserved.");
-MAKE_RCSID("$NetBSD: main.c,v 1.5 2013/03/05 01:44:34 dholland Exp $");
+MAKE_RCSID("$NetBSD: main.c,v 1.6 2013/03/05 03:32:08 dholland Exp $");
#ifndef DEFMAXLOCAL
#define DEFMAXLOCAL DEFMAXJOBS
#endif /* DEFMAXLOCAL */
-Lst create; /* Targets to be made */
+struct stringarray create; /* Targets to be made */
time_t now; /* Time at start of make */
GNode *DEFAULT; /* .DEFAULT node */
Boolean allPrecious; /* .PRECIOUS given on line by itself */
@@ -564,7 +564,7 @@ rearg:
Punt("illegal (null) argument.");
if (*argv[1] == '-' && !dashDash)
goto rearg;
- (void)Lst_AtEnd(create, bmake_strdup(argv[1]));
+ stringarray_add(&create, bmake_strdup(argv[1]), NULL);
}
return;
@@ -755,7 +755,7 @@ MakeMode(const char *mode)
int
main(int argc, char **argv)
{
- Lst targs; /* target nodes to create -- passed to Make_Init */
+ GList *targs; /* target nodes to create -- passed to Make_Init */
Boolean outOfDate = FALSE; /* FALSE if all targets up to date */
struct stat sb, sa;
char *p1, *path, *pwd;
@@ -763,7 +763,7 @@ main(int argc, char **argv)
const char *machine = getenv("MACHINE");
const char *machine_arch = getenv("MACHINE_ARCH");
char *syspath = getenv("MAKESYSPATH");
- Lst sysMkPath; /* Path of sys.mk */
+ struct stringarray sysMkPath; /* Path of sys.mk */
char *cp = NULL, *start;
/* avoid faults on read-only strings */
static char defsyspath[] = _PATH_DEFSYSPATH;
@@ -864,7 +864,7 @@ main(int argc, char **argv)
VAR_GLOBAL, 0);
Var_Set(MAKE_DEPENDFILE, ".depend", VAR_GLOBAL, 0);
- create = Lst_Init(FALSE);
+ stringarray_init(&create);
makefiles = Lst_Init(FALSE);
printVars = FALSE;
debugVflag = FALSE;
@@ -1049,14 +1049,14 @@ main(int argc, char **argv)
* created. If none specified, make the variable empty -- the parser
* will fill the thing in with the default or .MAIN target.
*/
- if (!Lst_IsEmpty(create)) {
- LstNode ln;
-
- for (ln = Lst_First(create); ln != NULL;
- ln = Lst_Succ(ln)) {
- char *name = (char *)Lst_Datum(ln);
-
- Var_Append(".TARGETS", name, VAR_GLOBAL);
+ if (stringarray_num(&create) > 0) {
+ char *name;
+ unsigned i, num;
+
+ num = stringarray_num(&create);
+ for (i=0; i<num; i++) {
+ name = stringarray_get(&create, i);
+ Var_Append(".TARGETS", name, VAR_GLOBAL);
}
} else
Var_Set(".TARGETS", "", VAR_GLOBAL, 0);
@@ -1097,19 +1097,32 @@ main(int argc, char **argv)
* makefile and Makefile, in that order, if it wasn't.
*/
if (!noBuiltins) {
- LstNode ln;
+ unsigned i, num;
+ char *f;
- sysMkPath = Lst_Init(FALSE);
+ stringarray_init(&sysMkPath);
Dir_Expand(_PATH_DEFSYSMK,
patharray_num(&sysIncPath) == 0 ? &defIncPath : &sysIncPath,
- sysMkPath);
- if (Lst_IsEmpty(sysMkPath))
+ &sysMkPath);
+ if (stringarray_num(&sysMkPath) == 0) {
Fatal("%s: no system rules (%s).", progname,
_PATH_DEFSYSMK);
- ln = Lst_Find(sysMkPath, NULL, ReadMakefile);
- if (ln == NULL)
+ }
+
+ num = stringarray_num(&sysMkPath);
+ for (i=0; i<num; i++) {
+ f = stringarray_get(&sysMkPath, i);
+ if (ReadMakefile(f, NULL) == 0) {
+ /* success; stop trying */
+ break;
+ }
+ }
+ if (i == num) {
+ /* none succeeded */
+ /* XXX: should warn on any that exist but won't read */
Fatal("%s: cannot open %s.", progname,
- (char *)Lst_Datum(ln));
+ stringarray_get(&sysMkPath, 0));
+ }
}
if (!Lst_IsEmpty(makefiles)) {
@@ -1237,16 +1250,10 @@ main(int argc, char **argv)
* we consult the parsing module to find the main target(s)
* to create.
*/
- if (Lst_IsEmpty(create)) {
- GList tmp;
-
- glist_init(&tmp);
- Parse_MainName(&tmp);
- targs = LstFromArray(&tmp.arr); /* XXX not typesafe */
- glist_setsize(&tmp, 0);
- glist_cleanup(&tmp);
+ if (stringarray_num(&create) == 0) {
+ targs = Parse_MainName();
} else {
- targs = Targ_FindList(create, TARG_CREATE);
+ targs = Targ_FindList(&create, TARG_CREATE);
}
if (!compatMake) {
@@ -1274,10 +1281,21 @@ main(int argc, char **argv)
}
#ifdef CLEANUP
- Lst_Destroy(targs, NULL);
+ glist_setsize(targs, 0);
+ /*
+ * targs[] was malloc'd and returned by Parse_MainName and/or
+ * Targ_FindList, so needs to be _destroy'd.
+ */
+ glist_destroy(targs);
+
Lst_Destroy(variables, NULL);
Lst_Destroy(makefiles, NULL);
- Lst_Destroy(create, (FreeProc *)free);
+ num = stringarray_num(&create);
+ for (i=0; i<num; i++) {
+ free(stringarray_get(&create, i));
+ }
+ stringarray_setsize(&create, 0);
+ stringarray_cleanup(&create);
#endif
/* print the graph now it's been processed if the user requested it */
Index: othersrc/usr.bin/dholland-make2/parse.c
diff -u othersrc/usr.bin/dholland-make2/parse.c:1.5 othersrc/usr.bin/dholland-make2/parse.c:1.6
--- othersrc/usr.bin/dholland-make2/parse.c:1.5 Tue Mar 5 01:44:34 2013
+++ othersrc/usr.bin/dholland-make2/parse.c Tue Mar 5 03:32:08 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: parse.c,v 1.5 2013/03/05 01:44:34 dholland Exp $ */
+/* $NetBSD: parse.c,v 1.6 2013/03/05 03:32:08 dholland Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -138,7 +138,7 @@
#include "buf.h"
#include "pathnames.h"
-MAKE_RCSID("$NetBSD: parse.c,v 1.5 2013/03/05 01:44:34 dholland Exp $");
+MAKE_RCSID("$NetBSD: parse.c,v 1.6 2013/03/05 03:32:08 dholland Exp $");
////////////////////////////////////////////////////////////
// types and constants
@@ -228,7 +228,7 @@ static GNode *mainNode;
// eval state
/* targets we're working on */
-static Lst targets;
+static GList targets;
#ifdef CLEANUP
/* command lines for targets */
@@ -341,12 +341,8 @@ static void ParseErrorInternal(const cha
static void ParseVErrorInternal(FILE *, const char *, size_t, int, const char *, va_list)
MAKE_ATTR_PRINTFLIKE(5, 0);
static int ParseFindKeyword(const char *);
-static int ParseLinkSrc(void *, void *);
-static int ParseDoOp(void *, void *);
static void ParseDoSrc(int, const char *);
-static int ParseFindMain(void *, void *);
static void ParseDoDependency(char *);
-static int ParseAddCmd(void *, void *);
static void ParseHasCommands(void *);
static void ParseDoInclude(char *);
static void ParseSetParseFile(const char *);
@@ -813,7 +809,7 @@ ParseMessage(char *line)
* cgpn The child node
*
* Results:
- * Always = 0
+ * none
*
* Side Effects:
* New elements are added to the parents list of cgn and the
@@ -821,12 +817,9 @@ ParseMessage(char *line)
* to reflect the additional child.
*---------------------------------------------------------------------
*/
-static int
-ParseLinkSrc(void *pgnp, void *cgnp)
+static void
+ParseLinkSrc(GNode *pgn, GNode *cgn)
{
- GNode *pgn = (GNode *)pgnp;
- GNode *cgn = (GNode *)cgnp;
-
if ((pgn->type & OP_DOUBLEDEP) && glist_num(&pgn->cohorts) > 0) {
pgn = glist_get(&pgn->cohorts, glist_num(&pgn->cohorts) - 1);
}
@@ -839,7 +832,6 @@ ParseLinkSrc(void *pgnp, void *cgnp)
Targ_PrintNode(pgn, 0);
Targ_PrintNode(cgn, 0);
}
- return (0);
}
/*-
@@ -855,18 +847,16 @@ ParseLinkSrc(void *pgnp, void *cgnp)
* opp The operator to apply
*
* Results:
- * Always 0
+ * none
*
* Side Effects:
* The type field of the node is altered to reflect any new bits in
* the op.
*---------------------------------------------------------------------
*/
-static int
-ParseDoOp(void *gnp, void *opp)
+static void
+ParseDoOp(GNode *gn, int op)
{
- GNode *gn = (GNode *)gnp;
- int op = *(int *)opp;
/*
* If the dependency mask of the operator and the node don't match and
* the node has actually had an operator applied to it before, and
@@ -876,7 +866,7 @@ ParseDoOp(void *gnp, void *opp)
!OP_NOP(gn->type) && !OP_NOP(op))
{
Parse_Error(PARSE_FATAL, "Inconsistent operator for %s", gn->name);
- return (1);
+ return;
}
if ((op == OP_DOUBLEDEP) && ((gn->type & OP_OPMASK) == OP_DOUBLEDEP)) {
@@ -917,8 +907,6 @@ ParseDoOp(void *gnp, void *opp)
*/
gn->type |= op;
}
-
- return (0);
}
/*-
@@ -948,13 +936,16 @@ ParseDoSrc(int tOp, const char *src)
GNode *gn = NULL;
static int wait_number = 0;
char wait_src[16];
+ unsigned i;
if (*src == '.' && isupper ((unsigned char)src[1])) {
int keywd = ParseFindKeyword(src);
if (keywd != -1) {
int op = parseKeywords[keywd].op;
if (op != 0) {
- Lst_ForEach(targets, ParseDoOp, &op);
+ for (i=0; i<glist_num(&targets); i++) {
+ ParseDoOp(glist_get(&targets, i), op);
+ }
return;
}
if (parseKeywords[keywd].spec == Wait) {
@@ -970,7 +961,9 @@ ParseDoSrc(int tOp, const char *src)
snprintf(wait_src, sizeof wait_src, ".WAIT_%u", ++wait_number);
gn = Targ_FindNode(wait_src, TARG_NOHASH);
gn->type = OP_WAIT | OP_PHONY | OP_DEPENDS | OP_NOTMAIN;
- Lst_ForEach(targets, ParseLinkSrc, gn);
+ for (i=0; i<glist_num(&targets); i++) {
+ ParseLinkSrc(glist_get(&targets, i), gn);
+ }
return;
}
}
@@ -981,12 +974,12 @@ ParseDoSrc(int tOp, const char *src)
/*
* If we have noted the existence of a .MAIN, it means we need
* to add the sources of said target to the list of things
- * to create. The string 'src' is likely to be free, so we
+ * to create. The string 'src' is likely to be freed, so we
* must make a new copy of it. Note that this will only be
* invoked if the user didn't specify a target on the command
* line. This is to allow #ifmake's to succeed, or something...
*/
- (void)Lst_AtEnd(create, bmake_strdup(src));
+ stringarray_add(&create, bmake_strdup(src), NULL);
/*
* Add the name to the .TARGETS variable as well, so the user can
* employ that, if desired.
@@ -1034,7 +1027,9 @@ ParseDoSrc(int tOp, const char *src)
if (tOp) {
gn->type |= tOp;
} else {
- Lst_ForEach(targets, ParseLinkSrc, gn);
+ for (i=0; i<glist_num(&targets); i++) {
+ ParseLinkSrc(glist_get(&targets, i), gn);
+ }
}
break;
}
@@ -1059,15 +1054,14 @@ ParseDoSrc(int tOp, const char *src)
*-----------------------------------------------------------------------
*/
static int
-ParseFindMain(void *gnp, void *dummy)
+ParseFindMain(GNode *gn)
{
- GNode *gn = (GNode *)gnp;
if ((gn->type & OP_NOTARGET) == 0) {
mainNode = gn;
Targ_SetMain(gn);
- return (dummy ? 1 : 1);
+ return 1;
} else {
- return (dummy ? 0 : 0);
+ return 0;
}
}
@@ -1118,11 +1112,12 @@ ParseDoDependency(char *line)
/* List of search paths to alter when parsing a list of .PATH targets */
struct patharrayarray paths;
int tOp; /* operator from special target */
- Lst sources; /* list of archive source names after
+ GList sources; /* list of archive source names after
* expansion */
- Lst curTargs; /* list of target names to be found and added
- * to the targets list */
+ /* list of target names to be found and added to the targets list */
+ struct stringarray curTargs;
char *lstart = line;
+ unsigned i;
if (DEBUG(PARSE))
fprintf(debug_file, "ParseDoDependency(%s)\n", line);
@@ -1131,7 +1126,7 @@ ParseDoDependency(char *line)
specType = Not;
patharrayarray_init(&paths);
- curTargs = Lst_Init(FALSE);
+ stringarray_init(&curTargs);
do {
for (cp = line; *cp && (ParseIsEscaped(lstart, cp) ||
@@ -1168,7 +1163,7 @@ ParseDoDependency(char *line)
* went well and FAILURE if there was an error in the
* specification. On error, line should remain untouched.
*/
- if (Arch_ParseArchive(&line, targets, VAR_CMD) != SUCCESS) {
+ if (Arch_ParseArchive(&line, &targets, VAR_CMD) != SUCCESS) {
Parse_Error(PARSE_FATAL,
"Error in archive specification: \"%s\"", line);
goto out;
@@ -1250,7 +1245,7 @@ ParseDoDependency(char *line)
patharrayarray_add(&paths, &dirSearchPath, NULL);
break;
case Main:
- if (!Lst_IsEmpty(create)) {
+ if (stringarray_num(&create) > 0) {
specType = Not;
}
break;
@@ -1260,12 +1255,12 @@ ParseDoDependency(char *line)
case Interrupt:
gn = Targ_FindNode(line, TARG_CREATE);
gn->type |= OP_NOTMAIN|OP_SPECIAL;
- (void)Lst_AtEnd(targets, gn);
+ glist_add(&targets, gn, NULL);
break;
case Default:
gn = Targ_NewGN(".DEFAULT");
gn->type |= (OP_NOTMAIN|OP_TRANSFORM);
- (void)Lst_AtEnd(targets, gn);
+ glist_add(&targets, gn, NULL);
DEFAULT = gn;
break;
case NotParallel:
@@ -1319,18 +1314,18 @@ ParseDoDependency(char *line)
struct patharray emptyPath;
patharray_init(&emptyPath);
- Dir_Expand(line, &emptyPath, curTargs);
+ Dir_Expand(line, &emptyPath, &curTargs);
patharray_cleanup(&emptyPath);
} else {
/*
* No wildcards, but we want to avoid code duplication,
* so create a list with the word on it.
*/
- (void)Lst_AtEnd(curTargs, line);
+ stringarray_add(&curTargs, line, NULL);
}
- while(!Lst_IsEmpty(curTargs)) {
- char *targName = (char *)Lst_DeQueue(curTargs);
+ for (i=0; i<stringarray_num(&curTargs); i++) {
+ char *targName = stringarray_get(&curTargs, i);
if (!Suff_IsTransform (targName)) {
gn = Targ_FindNode(targName, TARG_CREATE);
@@ -1338,8 +1333,9 @@ ParseDoDependency(char *line)
gn = Suff_AddTransform(targName);
}
- (void)Lst_AtEnd(targets, gn);
+ glist_add(&targets, gn, NULL);
}
+ stringarray_setsize(&curTargs, 0);
} else if (specType == ExPath && *line != '.' && *line != '\0') {
Parse_Error(PARSE_WARNING, "Extra target (%s) ignored", line);
}
@@ -1374,11 +1370,11 @@ ParseDoDependency(char *line)
/*
* Don't need the list of target names anymore...
+ * (but there shouldn't be anything in it here)
*/
- Lst_Destroy(curTargs, NULL);
- curTargs = NULL;
+ assert(stringarray_num(&curTargs) == 0);
- if (!Lst_IsEmpty(targets)) {
+ if (glist_num(&targets) > 0) {
switch(specType) {
default:
Parse_Error(PARSE_WARNING, "Special and mundane targets don't mix. Mundane ones ignored");
@@ -1421,7 +1417,9 @@ ParseDoDependency(char *line)
cp++; /* Advance beyond operator */
- Lst_ForEach(targets, ParseDoOp, &op);
+ for (i=0; i<glist_num(&targets); i++) {
+ ParseDoOp(glist_get(&targets, i), op);
+ }
/*
* Get to the first source
@@ -1594,18 +1592,20 @@ ParseDoDependency(char *line)
}
if (*cp == LPAREN) {
- sources = Lst_Init(FALSE);
- if (Arch_ParseArchive(&line, sources, VAR_CMD) != SUCCESS) {
+ glist_init(&sources);
+ if (Arch_ParseArchive(&line, &sources, VAR_CMD) != SUCCESS) {
Parse_Error(PARSE_FATAL,
"Error in source archive spec \"%s\"", line);
+ glist_cleanup(&sources);
goto out;
}
- while (!Lst_IsEmpty (sources)) {
- gn = (GNode *)Lst_DeQueue(sources);
+ for (i=0; i<glist_num(&sources); i++) {
+ gn = glist_get(&sources, i);
ParseDoSrc(tOp, gn->name);
}
- Lst_Destroy(sources, NULL);
+ glist_setsize(&sources, 0);
+ glist_cleanup(&sources);
cp = line;
} else {
if (*cp) {
@@ -1629,12 +1629,15 @@ ParseDoDependency(char *line)
* the first dependency line that is actually a real target
* (i.e. isn't a .USE or .EXEC rule) to be made.
*/
- Lst_ForEach(targets, ParseFindMain, NULL);
+ for (i=0; i<glist_num(&targets); i++) {
+ if (ParseFindMain(glist_get(&targets, i))) {
+ break;
+ }
+ }
}
out:
- if (curTargs)
- Lst_Destroy(curTargs, NULL);
+ stringarray_cleanup(&curTargs);
}
/*-
@@ -1906,9 +1909,8 @@ Parse_DoVar(char *line, GNode *ctxt)
* A new element is added to the commands list of the node.
*/
static int
-ParseAddCmd(void *gnp, void *cmd)
+ParseAddCmd(GNode *gn, char *cmd)
{
- GNode *gn = (GNode *)gnp;
/* Add to last (ie current) cohort for :: targets */
if ((gn->type & OP_DOUBLEDEP) && glist_num(&gn->cohorts) > 0) {
@@ -2726,10 +2728,18 @@ ParseReadLine(void)
static void
ParseFinishLine(void)
{
+ unsigned i;
+
if (inLine) {
- Lst_ForEach(targets, Suff_EndTransform, NULL);
- Lst_Destroy(targets, ParseHasCommands);
- targets = NULL;
+ for (i=0; i<glist_num(&targets); i++) {
+ if (Suff_EndTransform(glist_get(&targets, i), NULL)) {
+ break;
+ }
+ }
+ for (i=0; i<glist_num(&targets); i++) {
+ ParseHasCommands(glist_get(&targets, i));
+ }
+ glist_setsize(&targets, 0);
inLine = FALSE;
}
}
@@ -2761,6 +2771,7 @@ Parse_File(const char *name, int fd)
char *cp; /* pointer into the line */
char *line; /* the line we're working on */
struct loadedfile *lf;
+ unsigned i;
lf = loadfile(name, fd);
@@ -2841,9 +2852,11 @@ Parse_File(const char *name, int fd)
* in a dependency spec, add the command to the list of
* commands of all targets in the dependency spec
*/
- if (targets) {
+ if (glist_num(&targets) > 0) {
cp = bmake_strdup(cp);
- Lst_ForEach(targets, ParseAddCmd, cp);
+ for (i=0; i<glist_num(&targets); i++) {
+ ParseAddCmd(glist_get(&targets, i), cp);
+ }
#ifdef CLEANUP
Lst_AtEnd(targCmds, cp);
#endif
@@ -2952,12 +2965,9 @@ Parse_File(const char *name, int fd)
line = Var_Subst(NULL, line, VAR_CMD, TRUE);
/*
- * Need a non-circular list for the target nodes
+ * Clear the list of target nodes
*/
- if (targets)
- Lst_Destroy(targets, NULL);
-
- targets = Lst_Init(FALSE);
+ glist_setsize(&targets, 0);
inLine = TRUE;
ParseDoDependency(line);
@@ -3003,6 +3013,7 @@ Parse_Init(void)
patharray_init(&sysIncPath);
patharray_init(&defIncPath);
includes = Lst_Init(FALSE);
+ glist_init(&targets);
#ifdef CLEANUP
targCmds = Lst_Init(FALSE);
#endif
@@ -3013,8 +3024,8 @@ Parse_End(void)
{
#ifdef CLEANUP
Lst_Destroy(targCmds, (FreeProc *)free);
- if (targets)
- Lst_Destroy(targets, NULL);
+ glist_setsize(&targets, 0);
+ glist_cleanup(&targets);
Dir_ClearPath(&defIncPath);
Dir_ClearPath(&sysIncPath);
Dir_ClearPath(&parseIncPath);
@@ -3041,15 +3052,17 @@ Parse_End(void)
*
*-----------------------------------------------------------------------
*/
-void
-Parse_MainName(GList *mainList)
+GList *
+Parse_MainName(void)
{
unsigned i;
+ GList *mainList;
if (mainNode == NULL) {
Punt("no target to make.");
/*NOTREACHED*/
}
+ mainList = glist_create();
glist_add(mainList, mainNode, NULL);
if (mainNode->type & OP_DOUBLEDEP) {
for (i=0; i<glist_num(&mainNode->cohorts); i++) {
@@ -3057,6 +3070,7 @@ Parse_MainName(GList *mainList)
}
}
Var_Append(".TARGETS", mainNode->name, VAR_GLOBAL);
+ return mainList;
}
/*-
Index: othersrc/usr.bin/dholland-make2/cond.c
diff -u othersrc/usr.bin/dholland-make2/cond.c:1.3 othersrc/usr.bin/dholland-make2/cond.c:1.4
--- othersrc/usr.bin/dholland-make2/cond.c:1.3 Tue Mar 5 01:44:34 2013
+++ othersrc/usr.bin/dholland-make2/cond.c Tue Mar 5 03:32:08 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: cond.c,v 1.3 2013/03/05 01:44:34 dholland Exp $ */
+/* $NetBSD: cond.c,v 1.4 2013/03/05 03:32:08 dholland Exp $ */
/*
* Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -90,7 +90,7 @@
#include "dir.h"
#include "buf.h"
-MAKE_RCSID("$NetBSD: cond.c,v 1.3 2013/03/05 01:44:34 dholland Exp $");
+MAKE_RCSID("$NetBSD: cond.c,v 1.4 2013/03/05 03:32:08 dholland Exp $");
/*
* The parsing of conditional expressions is based on this grammar:
@@ -140,7 +140,6 @@ typedef enum {
static void CondPushBack(Token);
static int CondGetArg(char **, char **, const char *);
static Boolean CondDoDefined(int, const char *);
-static int CondStrMatch(const void *, const void *);
static Boolean CondDoMake(int, const char *);
static Boolean CondDoExists(int, const char *);
static Boolean CondDoTarget(int, const char *);
@@ -337,26 +336,6 @@ CondDoDefined(int argLen MAKE_ATTR_UNUSE
/*-
*-----------------------------------------------------------------------
- * CondStrMatch --
- * Front-end for Str_Match so it returns 0 on match and non-zero
- * on mismatch. Callback function for CondDoMake via Lst_Find
- *
- * Results:
- * 0 if string matches pattern
- *
- * Side Effects:
- * None
- *
- *-----------------------------------------------------------------------
- */
-static int
-CondStrMatch(const void *string, const void *pattern)
-{
- return(!Str_Match(string, pattern));
-}
-
-/*-
- *-----------------------------------------------------------------------
* CondDoMake --
* Handle the 'make' function for conditionals.
*
@@ -371,7 +350,15 @@ CondStrMatch(const void *string, const v
static Boolean
CondDoMake(int argLen MAKE_ATTR_UNUSED, const char *arg)
{
- return Lst_Find(create, arg, CondStrMatch) != NULL;
+ unsigned i, num;
+
+ num = stringarray_num(&create);
+ for (i=0; i<num; i++) {
+ if (Str_Match(stringarray_get(&create, i), arg)) {
+ return TRUE;
+ }
+ }
+ return FALSE;
}
/*-
Index: othersrc/usr.bin/dholland-make2/nonints.h
diff -u othersrc/usr.bin/dholland-make2/nonints.h:1.3 othersrc/usr.bin/dholland-make2/nonints.h:1.4
--- othersrc/usr.bin/dholland-make2/nonints.h:1.3 Tue Mar 5 01:44:34 2013
+++ othersrc/usr.bin/dholland-make2/nonints.h Tue Mar 5 03:32:08 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: nonints.h,v 1.3 2013/03/05 01:44:34 dholland Exp $ */
+/* $NetBSD: nonints.h,v 1.4 2013/03/05 03:32:08 dholland Exp $ */
/*-
* Copyright (c) 1988, 1989, 1990, 1993
@@ -73,7 +73,7 @@
*/
/* arch.c */
-ReturnStatus Arch_ParseArchive(char **, Lst, GNode *);
+ReturnStatus Arch_ParseArchive(char **, GList *, GNode *);
void Arch_Touch(GNode *);
void Arch_TouchLib(GNode *);
time_t Arch_MTime(GNode *);
@@ -86,7 +86,7 @@ int Arch_IsLib(GNode *);
/* compat.c */
int CompatRunCommand(void *, void *);
-void Compat_Run(Lst);
+void Compat_Run(GList *);
int Compat_Make(void *, void *);
/* cond.c */
@@ -130,7 +130,7 @@ void Parse_File(const char *, int);
void Parse_Init(void);
void Parse_End(void);
void Parse_SetInput(const char *, int, int, char *(*)(void *, size_t *), void *);
-void Parse_MainName(GList *);
+GList *Parse_MainName(void);
/* str.c */
char *str_concat(const char *, const char *, int);
@@ -160,16 +160,16 @@ void Suff_PrintAll(void);
/* targ.c */
void Targ_Init(void);
void Targ_End(void);
-Lst Targ_List(void);
+GList *Targ_List(void);
GNode *Targ_NewGN(const char *);
GNode *Targ_FindNode(const char *, int);
-Lst Targ_FindList(Lst, int);
+GList *Targ_FindList(struct stringarray *, int);
Boolean Targ_Ignore(GNode *);
Boolean Targ_Silent(GNode *);
Boolean Targ_Precious(GNode *);
void Targ_SetMain(GNode *);
int Targ_PrintCmd(void *, void *);
-int Targ_PrintNode(void *, void *);
+void Targ_PrintNode(GNode *, int *);
char *Targ_FmtTime(time_t);
void Targ_PrintType(int);
void Targ_PrintGraph(int);
Index: othersrc/usr.bin/dholland-make2/dir.c
diff -u othersrc/usr.bin/dholland-make2/dir.c:1.4 othersrc/usr.bin/dholland-make2/dir.c:1.5
--- othersrc/usr.bin/dholland-make2/dir.c:1.4 Tue Mar 5 01:44:34 2013
+++ othersrc/usr.bin/dholland-make2/dir.c Tue Mar 5 03:32:08 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: dir.c,v 1.4 2013/03/05 01:44:34 dholland Exp $ */
+/* $NetBSD: dir.c,v 1.5 2013/03/05 03:32:08 dholland Exp $ */
/*
* Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -93,7 +93,7 @@
* Dir_HasWildcards Returns TRUE if the name given it needs to
* be wildcard-expanded.
*
- * Dir_Expand Given a pattern and a path, return a Lst of names
+ * Dir_Expand Given a pattern and a path, return a list of names
* which match the pattern on the search path.
*
* Dir_FindFile Searches for a file on a given search path.
@@ -137,10 +137,10 @@
#include "hash.h"
#include "dir.h"
-__RCSID("$NetBSD: dir.c,v 1.4 2013/03/05 01:44:34 dholland Exp $");
+__RCSID("$NetBSD: dir.c,v 1.5 2013/03/05 03:32:08 dholland Exp $");
/*
- * A search path consists of a Lst of Path structures. A Path structure
+ * A search path consists of a list of Path structures. A Path structure
* has in it the name of the directory and a hash table of all the files
* in the directory. This is used to cut down on the number of system
* calls necessary to find implicit dependents and their like. Since
@@ -149,7 +149,7 @@ __RCSID("$NetBSD: dir.c,v 1.4 2013/03/05
* hampers the style of some makefiles, they must be changed.
*
* A list of all previously-read directories is kept in the
- * openDirectories Lst. This list is checked first before a directory
+ * openDirectories list. This list is checked first before a directory
* is opened.
*
* The need for the caching of whole directories is brought about by
@@ -237,8 +237,6 @@ static Hash_Table mtimes; /* Results o
* should be ok, but... */
-static int DirMatchFiles(const char *, Path *, Lst);
-static int DirPrintWord(void *, void *);
static char *DirLookup(Path *, const char *, const char *, Boolean);
static char *DirLookupSubdir(Path *, const char *);
static char *DirFindDot(Boolean, const char *, const char *);
@@ -525,15 +523,15 @@ Dir_HasWildcards(char *name)
* expansion Place to store the results
*
* Results:
- * Always returns 0
+ * none
*
* Side Effects:
* File names are added to the expansions lst. The directory will be
* fully hashed when this is done.
*-----------------------------------------------------------------------
*/
-static int
-DirMatchFiles(const char *pattern, Path *p, Lst expansions)
+static void
+DirMatchFiles(const char *pattern, Path *p, struct stringarray *expansions)
{
Hash_Search search; /* Index into the directory's table */
Hash_Entry *entry; /* Current entry in the table */
@@ -555,13 +553,13 @@ DirMatchFiles(const char *pattern, Path
((entry->name[0] != '.') ||
(pattern[0] == '.')))
{
- (void)Lst_AtEnd(expansions,
- (isDot ? bmake_strdup(entry->name) :
- str_concat(p->name, entry->name,
- STR_ADDSLASH)));
+ char *val;
+
+ val = isDot ? bmake_strdup(entry->name) :
+ str_concat(p->name, entry->name, STR_ADDSLASH);
+ stringarray_add(expansions, val, NULL);
}
}
- return (0);
}
/*-
@@ -588,7 +586,7 @@ DirMatchFiles(const char *pattern, Path
*/
static void
DirExpandCurly(const char *word, const char *brace,
- const struct patharray *path, Lst expansions)
+ const struct patharray *path, struct stringarray *expansions)
{
const char *end; /* Character after the closing brace */
const char *cp; /* Current position in brace clause */
@@ -669,7 +667,7 @@ DirExpandCurly(const char *word, const c
* Hit the end w/o finding any wildcards, so stick the expansion
* on the end of the list.
*/
- (void)Lst_AtEnd(expansions, file);
+ stringarray_add(expansions, file, NULL);
} else {
next:
free(file);
@@ -700,7 +698,8 @@ DirExpandCurly(const char *word, const c
*-----------------------------------------------------------------------
*/
static void
-DirExpandInt(const char *word, const struct patharray *path, Lst expansions)
+DirExpandInt(const char *word, const struct patharray *path,
+ struct stringarray *expansions)
{
Path *p; /* Directory in the node */
unsigned i;
@@ -713,28 +712,6 @@ DirExpandInt(const char *word, const str
/*-
*-----------------------------------------------------------------------
- * DirPrintWord --
- * Print a word in the list of expansions. Callback for Dir_Expand
- * when DEBUG(DIR), via Lst_ForEach.
- *
- * Results:
- * === 0
- *
- * Side Effects:
- * The passed word is printed, followed by a space.
- *
- *-----------------------------------------------------------------------
- */
-static int
-DirPrintWord(void *word, void *dummy)
-{
- fprintf(debug_file, "%s ", (char *)word);
-
- return(dummy ? 0 : 0);
-}
-
-/*-
- *-----------------------------------------------------------------------
* Dir_Expand --
* Expand the given word into a list of words by globbing it looking
* in the directories on the given search path.
@@ -754,9 +731,11 @@ DirPrintWord(void *word, void *dummy)
*-----------------------------------------------------------------------
*/
void
-Dir_Expand(const char *word, const struct patharray *path, Lst expansions)
+Dir_Expand(const char *word, const struct patharray *path,
+ struct stringarray *expansions)
{
const char *cp;
+ unsigned i;
if (DEBUG(DIR)) {
fprintf(debug_file, "Expanding \"%s\"... ", word);
@@ -853,7 +832,9 @@ Dir_Expand(const char *word, const struc
}
}
if (DEBUG(DIR)) {
- Lst_ForEach(expansions, DirPrintWord, NULL);
+ for (i=0; i<stringarray_num(expansions); i++) {
+ fprintf(debug_file, "%s ", stringarray_get(expansions, i));
+ }
fprintf(debug_file, "\n");
}
}
@@ -1047,7 +1028,7 @@ DirFindDot(Boolean hasSlash MAKE_ATTR_UN
*
* Input:
* name the file to find
- * path the Lst of directories to search
+ * path the list of directories to search
*
* Results:
* The path to the file or NULL. This path is guaranteed to be in a
Index: othersrc/usr.bin/dholland-make2/graph.h
diff -u othersrc/usr.bin/dholland-make2/graph.h:1.4 othersrc/usr.bin/dholland-make2/graph.h:1.5
--- othersrc/usr.bin/dholland-make2/graph.h:1.4 Mon Mar 4 23:03:41 2013
+++ othersrc/usr.bin/dholland-make2/graph.h Tue Mar 5 03:32:08 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: graph.h,v 1.4 2013/03/04 23:03:41 dholland Exp $ */
+/* $NetBSD: graph.h,v 1.5 2013/03/05 03:32:08 dholland Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -128,9 +128,9 @@ enum enum_made {
* 17) a list of nodes that must be made (if they're made) after
* this node is, but that do not depend on this node, in the
* normal sense.
- * 18) a Lst of ``local'' variables that are specific to this target
+ * 18) a list of ``local'' variables that are specific to this target
* and this target only (qv. var.c [$@ $< $?, etc.])
- * 19) a Lst of strings that are commands to be given to a shell
+ * 19) a list of strings that are commands to be given to a shell
* to create this target.
*/
struct GNode {
Index: othersrc/usr.bin/dholland-make2/dir.h
diff -u othersrc/usr.bin/dholland-make2/dir.h:1.2 othersrc/usr.bin/dholland-make2/dir.h:1.3
--- othersrc/usr.bin/dholland-make2/dir.h:1.2 Tue Mar 5 01:44:34 2013
+++ othersrc/usr.bin/dholland-make2/dir.h Tue Mar 5 03:32:08 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: dir.h,v 1.2 2013/03/05 01:44:34 dholland Exp $ */
+/* $NetBSD: dir.h,v 1.3 2013/03/05 03:32:08 dholland Exp $ */
/*
* Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -101,7 +101,7 @@ void Dir_InitDot(void);
void Dir_End(void);
void Dir_SetPATH(void);
Boolean Dir_HasWildcards(char *);
-void Dir_Expand(const char *, const struct patharray *, Lst);
+void Dir_Expand(const char *, const struct patharray *, struct stringarray *);
char *Dir_FindFile(const char *, const struct patharray *);
int Dir_FindHereOrAbove(char *, char *, char *, int);
int Dir_MTime(GNode *, Boolean);
Index: othersrc/usr.bin/dholland-make2/make.c
diff -u othersrc/usr.bin/dholland-make2/make.c:1.6 othersrc/usr.bin/dholland-make2/make.c:1.7
--- othersrc/usr.bin/dholland-make2/make.c:1.6 Mon Mar 4 23:31:57 2013
+++ othersrc/usr.bin/dholland-make2/make.c Tue Mar 5 03:32:08 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: make.c,v 1.6 2013/03/04 23:31:57 dholland Exp $ */
+/* $NetBSD: make.c,v 1.7 2013/03/05 03:32:08 dholland Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -111,7 +111,7 @@
#include "dir.h"
#include "job.h"
-MAKE_RCSID("$NetBSD: make.c,v 1.6 2013/03/04 23:31:57 dholland Exp $");
+MAKE_RCSID("$NetBSD: make.c,v 1.7 2013/03/05 03:32:08 dholland Exp $");
static unsigned int checked = 1;/* Sequence # to detect recursion */
static Lst toBeMade; /* The current fringe of the graph. These
@@ -132,6 +132,14 @@ static int DoMakeCheckOrder(GList *);
static int MakeBuildChild(GNode *, LstNode);
static void MakeBuildParent(GNode *, LstNode);
+/* XXX: non-typesafe wrapper for list code; remove when possible */
+static int
+doTarg_PrintNode(void *a, void *b)
+{
+ Targ_PrintNode(a, b);
+ return 0;
+}
+
MAKE_ATTR_DEAD static void
make_abort(GNode *gn, int line)
{
@@ -139,7 +147,7 @@ make_abort(GNode *gn, int line)
fprintf(debug_file, "make_abort from line %d\n", line);
Targ_PrintNode(gn, &two);
- Lst_ForEach(toBeMade, Targ_PrintNode, &two);
+ Lst_ForEach(toBeMade, doTarg_PrintNode, &two);
Targ_PrintGraph(3);
abort();
}
@@ -1285,13 +1293,6 @@ MakePrintStatus(GNode *gn, int *errors)
return 0;
}
-/* non-typesafe thunk for list library; remove when possible (XXX) */
-static int
-doMakePrintStatus(void *gnp, void *errors)
-{
- return MakePrintStatus(gnp, errors);
-}
-
/*-
@@ -1306,14 +1307,16 @@ doMakePrintStatus(void *gnp, void *error
*-----------------------------------------------------------------------
*/
void
-Make_ExpandUse(Lst targs)
+Make_ExpandUse(GList *targs)
{
GNode *gn; /* a temporary pointer */
GList examine; /* List of targets to examine */
unsigned i;
glist_init(&examine);
- Lst_IntoArray(targs, &examine.arr); /* XXX not typesafe */
+ for (i=0; i<glist_num(targs); i++) {
+ glist_add(&examine, glist_get(targs, i), NULL);
+ }
/*
* Make an initial downward pass over the graph, marking nodes to be made
@@ -1415,16 +1418,12 @@ Make_ExpandUse(Lst targs)
*-----------------------------------------------------------------------
*/
-static int
-link_parent(void *cnp, void *pnp)
+static void
+link_parent(GNode *cn, GNode *pn)
{
- GNode *cn = cnp;
- GNode *pn = pnp;
-
glist_add(&pn->children, cn, NULL);
glist_add(&cn->parents, pn, NULL);
pn->unmade++;
- return 0;
}
static int
@@ -1448,7 +1447,7 @@ add_wait_dep(GNode *cn, GNode *wn)
}
static void
-Make_ProcessWait(Lst targs)
+Make_ProcessWait(GList *targs)
{
GNode *pgn; /* 'parent' node we are examining */
GNode *cgn; /* Each child in turn */
@@ -1465,9 +1464,17 @@ Make_ProcessWait(Lst targs)
pgn->flags = REMAKE;
pgn->type = OP_PHONY | OP_DEPENDS;
/* Get it displayed in the diag dumps */
- Lst_AtFront(Targ_List(), pgn);
+ {
+ GList *alltargs;
- Lst_ForEach(targs, link_parent, pgn);
+ alltargs = Targ_List();
+ glist_insert(alltargs, 0);
+ glist_set(alltargs, 0, pgn);
+ }
+
+ for (i=0; i<glist_num(targs); i++) {
+ link_parent(glist_get(targs, i), pgn);
+ }
/* Start building with the 'dummy' .MAIN' node */
MakeBuildChild(pgn, NULL);
@@ -1496,8 +1503,6 @@ Make_ProcessWait(Lst targs)
* XXX: this is a silly way of doing things when examine is
* an array.
*/
- unsigned i;
-
for (i=glist_num(&pgn->cohorts); i-- > 0; ) {
glist_insert(&examine, 0);
glist_set(&examine, 0, glist_get(&pgn->cohorts, i));
@@ -1550,9 +1555,10 @@ Make_ProcessWait(Lst targs)
*-----------------------------------------------------------------------
*/
Boolean
-Make_Run(Lst targs)
+Make_Run(GList *targs)
{
int errors; /* Number of errors the Job module reports */
+ unsigned i, num;
/* Start trying to make the current targets... */
toBeMade = Lst_Init(FALSE);
@@ -1606,7 +1612,12 @@ Make_Run(Lst targs)
if (DEBUG(MAKE))
fprintf(debug_file, "done: errors %d\n", errors);
if (errors == 0) {
- Lst_ForEach(targs, doMakePrintStatus, &errors);
+ num = glist_num(targs);
+ for (i=0; i<num; i++) {
+ if (MakePrintStatus(glist_get(targs, i), &errors)) {
+ break;
+ }
+ }
if (DEBUG(MAKE)) {
fprintf(debug_file, "done: errors %d\n", errors);
if (errors)
Index: othersrc/usr.bin/dholland-make2/suff.c
diff -u othersrc/usr.bin/dholland-make2/suff.c:1.6 othersrc/usr.bin/dholland-make2/suff.c:1.7
--- othersrc/usr.bin/dholland-make2/suff.c:1.6 Tue Mar 5 01:44:34 2013
+++ othersrc/usr.bin/dholland-make2/suff.c Tue Mar 5 03:32:08 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: suff.c,v 1.6 2013/03/05 01:44:34 dholland Exp $ */
+/* $NetBSD: suff.c,v 1.7 2013/03/05 03:32:08 dholland Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -131,7 +131,7 @@
#include "hash.h"
#include "dir.h"
-MAKE_RCSID("$NetBSD: suff.c,v 1.6 2013/03/05 01:44:34 dholland Exp $");
+MAKE_RCSID("$NetBSD: suff.c,v 1.7 2013/03/05 03:32:08 dholland Exp $");
static Lst sufflist; /* Lst of suffixes */
#ifdef CLEANUP
@@ -217,7 +217,6 @@ static void SuffInsert(Lst, Suff *);
static void SuffRemove(Lst, Suff *);
static Boolean SuffParseTransform(char *, Suff **, Suff **);
static int SuffRebuildGraph(void *, void *);
-static int SuffScanTargets(void *, void *);
static int SuffAddSrc(void *, void *);
static int SuffRemoveSrc(Lst);
static void SuffAddLevel(Lst, Src *);
@@ -894,10 +893,8 @@ SuffRebuildGraph(void *transformp, void
*-----------------------------------------------------------------------
*/
static int
-SuffScanTargets(void *targetp, void *gsp)
+SuffScanTargets(GNode *target, GNodeSuff *gs)
{
- GNode *target = (GNode *)targetp;
- GNodeSuff *gs = (GNodeSuff *)gsp;
Suff *s, *t;
char *ptr;
@@ -960,6 +957,8 @@ Suff_AddSuffix(char *str, GNode **gn)
Suff *s; /* new suffix descriptor */
LstNode ln;
GNodeSuff gs;
+ GList *alltargets;
+ unsigned i, num;
ln = Lst_Find(sufflist, str, SuffSuffHasNameP);
if (ln == NULL) {
@@ -985,7 +984,14 @@ Suff_AddSuffix(char *str, GNode **gn)
gs.gn = gn;
gs.s = s;
gs.r = FALSE;
- Lst_ForEach(Targ_List(), SuffScanTargets, &gs);
+ alltargets = Targ_List();
+ num = glist_num(alltargets);
+ for (i=0; i<num; i++) {
+ if (SuffScanTargets(glist_get(alltargets, i), &gs)) {
+ /* XXX: is this really right? */
+ break;
+ }
+ }
/*
* Look for any existing transformations from or to this suffix.
* XXX: Only do this after a Suff_ClearSuffixes?
@@ -1545,6 +1551,7 @@ SuffExpandChildren(GNode *cgn, unsigned
{
GNode *gn; /* New source 8) */
char *cp; /* Expanded value */
+ unsigned i, num;
assert(glist_get(&pgn->children, cindex) == cgn);
@@ -1572,7 +1579,9 @@ SuffExpandChildren(GNode *cgn, unsigned
cp = Var_Subst(NULL, cgn->name, pgn, TRUE);
if (cp != NULL) {
- Lst members = Lst_Init(FALSE);
+ GList members;
+
+ glist_init(&members);
if (cgn->type & OP_ARCHV) {
/*
@@ -1582,7 +1591,7 @@ SuffExpandChildren(GNode *cgn, unsigned
*/
char *sacrifice = cp;
- (void)Arch_ParseArchive(&sacrifice, members, pgn);
+ (void)Arch_ParseArchive(&sacrifice, &members, pgn);
} else {
/*
* Break the result into a vector of strings whose nodes
@@ -1604,7 +1613,7 @@ SuffExpandChildren(GNode *cgn, unsigned
*/
*cp++ = '\0';
gn = Targ_FindNode(start, TARG_CREATE);
- (void)Lst_AtEnd(members, gn);
+ glist_add(&members, gn, NULL);
while (*cp == ' ' || *cp == '\t') {
cp++;
}
@@ -1642,7 +1651,7 @@ SuffExpandChildren(GNode *cgn, unsigned
* Stuff left over -- add it to the list too
*/
gn = Targ_FindNode(start, TARG_CREATE);
- (void)Lst_AtEnd(members, gn);
+ glist_add(&members, gn, NULL);
}
/*
* Point cp back at the beginning again so the variable value
@@ -1654,8 +1663,9 @@ SuffExpandChildren(GNode *cgn, unsigned
/*
* Add all elements of the members list to the parent node.
*/
- while(!Lst_IsEmpty(members)) {
- gn = (GNode *)Lst_DeQueue(members);
+ num = glist_num(&members);
+ for (i=0; i<num; i++) {
+ gn = glist_get(&members, i);
if (DEBUG(SUFF)) {
fprintf(debug_file, "%s...", gn->name);
@@ -1673,7 +1683,8 @@ SuffExpandChildren(GNode *cgn, unsigned
cindex = SuffExpandWildcards(gn, cindex - 1, pgn);
assert(glist_get(&pgn->children, cindex) == cgn);
}
- Lst_Destroy(members, NULL);
+ glist_setsize(&members, 0);
+ glist_cleanup(&members);
/*
* Free the result
@@ -1706,7 +1717,8 @@ SuffExpandWildcards(GNode *cgn, unsigned
{
GNode *gn; /* New source 8) */
char *cp; /* Expanded value */
- Lst explist; /* List of expansions */
+ struct stringarray explist; /* Expansions */
+ unsigned i;
assert(glist_get(&pgn->children, cindex) == cgn);
@@ -1716,14 +1728,14 @@ SuffExpandWildcards(GNode *cgn, unsigned
/*
* Expand the word along the chosen path
*/
- explist = Lst_Init(FALSE);
- Dir_Expand(cgn->name, Suff_FindPath(cgn), explist);
+ stringarray_init(&explist);
+ Dir_Expand(cgn->name, Suff_FindPath(cgn), &explist);
- while (!Lst_IsEmpty(explist)) {
+ for (i=0; i<stringarray_num(&explist); i++) {
/*
* Fetch next expansion off the list and find its GNode
*/
- cp = (char *)Lst_DeQueue(explist);
+ cp = stringarray_get(&explist, i);
if (DEBUG(SUFF)) {
fprintf(debug_file, "%s...", cp);
@@ -1742,7 +1754,7 @@ SuffExpandWildcards(GNode *cgn, unsigned
/*
* Nuke what's left of the list
*/
- Lst_Destroy(explist, NULL);
+ stringarray_cleanup(&explist);
if (DEBUG(SUFF)) {
fprintf(debug_file, "\n");
Index: othersrc/usr.bin/dholland-make2/targ.c
diff -u othersrc/usr.bin/dholland-make2/targ.c:1.6 othersrc/usr.bin/dholland-make2/targ.c:1.7
--- othersrc/usr.bin/dholland-make2/targ.c:1.6 Mon Mar 4 23:31:57 2013
+++ othersrc/usr.bin/dholland-make2/targ.c Tue Mar 5 03:32:08 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: targ.c,v 1.6 2013/03/04 23:31:57 dholland Exp $ */
+/* $NetBSD: targ.c,v 1.7 2013/03/05 03:32:08 dholland Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -127,23 +127,21 @@
#include "hash.h"
#include "dir.h"
-MAKE_RCSID("$NetBSD: targ.c,v 1.6 2013/03/04 23:31:57 dholland Exp $");
+MAKE_RCSID("$NetBSD: targ.c,v 1.7 2013/03/05 03:32:08 dholland Exp $");
-static Lst allTargets; /* the list of all targets found so far */
+static GList allTargets; /* the list of all targets found so far */
#ifdef CLEANUP
-static Lst allGNs; /* List of all the GNodes */
+static GList allGNs; /* List of all the GNodes */
#endif
static Hash_Table targets; /* a hash table of same */
#define HTSIZE 191 /* initial size of hash table */
-static int TargPrintOnlySrc(void *, void *);
static void TargPrintName(GNode *);
#ifdef CLEANUP
-static void TargFreeGN(void *);
+static void TargFreeGN(GNode *);
#endif
static void TargPropagateCohort(GNode *, GNode *);
-static int TargPropagateNode(void *, void *);
/*-
*-----------------------------------------------------------------------
@@ -160,8 +158,11 @@ static int TargPropagateNode(void *, voi
void
Targ_Init(void)
{
- allTargets = Lst_Init(FALSE);
- Hash_InitTable(&targets, HTSIZE);
+ glist_init(&allTargets);
+#ifdef CLEANUP
+ glist_init(&allGNs);
+#endif
+ Hash_InitTable(&targets, HTSIZE);
}
/*-
@@ -180,10 +181,17 @@ void
Targ_End(void)
{
#ifdef CLEANUP
- Lst_Destroy(allTargets, NULL);
- if (allGNs)
- Lst_Destroy(allGNs, TargFreeGN);
- Hash_DeleteTable(&targets);
+ unsigned i, num;
+
+ glist_setsize(&allTargets, 0);
+ glist_cleanup(&allTargets);
+
+ num = glist_num(&allGNs);
+ for (i=0; i<num; i++) {
+ TargFreeGN(glist_get(&allGNs, i));
+ }
+
+ Hash_DeleteTable(&targets);
#endif
}
@@ -199,10 +207,10 @@ Targ_End(void)
* None
*-----------------------------------------------------------------------
*/
-Lst
+GList *
Targ_List(void)
{
- return allTargets;
+ return &allTargets;
}
/*-
@@ -257,9 +265,7 @@ Targ_NewGN(const char *name)
gn->fname = NULL;
#ifdef CLEANUP
- if (allGNs == NULL)
- allGNs = Lst_Init(FALSE);
- Lst_AtEnd(allGNs, gn);
+ glist_add(&allGNs, gn, NULL);
#endif
return (gn);
@@ -279,11 +285,8 @@ Targ_NewGN(const char *name)
*-----------------------------------------------------------------------
*/
static void
-TargFreeGN(void *gnp)
+TargFreeGN(GNode *gn)
{
- GNode *gn = (GNode *)gnp;
-
-
free(gn->name);
if (gn->uname)
free(gn->uname);
@@ -354,7 +357,7 @@ Targ_FindNode(const char *name, int flag
if (!(flags & TARG_NOHASH))
Hash_SetValue(he, gn);
Var_Append(".ALLTARGETS", name, VAR_GLOBAL);
- (void)Lst_AtEnd(allTargets, gn);
+ glist_add(&allTargets, gn, NULL);
if (doing_depend)
gn->flags |= FROM_DEPEND;
return gn;
@@ -379,34 +382,26 @@ Targ_FindNode(const char *name, int flag
* an error message will be printed for each name which can't be found.
* -----------------------------------------------------------------------
*/
-Lst
-Targ_FindList(Lst names, int flags)
+GList *
+Targ_FindList(struct stringarray *names, int flags)
{
- Lst nodes; /* result list */
- LstNode ln; /* name list element */
- GNode *gn; /* node in tLn */
+ GList *nodes; /* result list */
+ GNode *gn;
char *name;
+ unsigned i, num;
- nodes = Lst_Init(FALSE);
+ nodes = glist_create();
- if (Lst_Open(names) == FAILURE) {
- return (nodes);
- }
- while ((ln = Lst_Next(names)) != NULL) {
- name = (char *)Lst_Datum(ln);
+ num = stringarray_num(names);
+ for (i=0; i<num; i++) {
+ name = stringarray_get(names, i);
gn = Targ_FindNode(name, flags);
if (gn != NULL) {
- /*
- * Note: Lst_AtEnd must come before the Lst_Concat so the nodes
- * are added to the list in the order in which they were
- * encountered in the makefile.
- */
- (void)Lst_AtEnd(nodes, gn);
+ glist_add(nodes, gn, NULL);
} else if (flags == TARG_NOCREATE) {
Error("\"%s\" -- target unknown.", name);
}
}
- Lst_Close(names);
return (nodes);
}
@@ -618,16 +613,15 @@ made_name(enum enum_made made)
* print the contents of a node
*-----------------------------------------------------------------------
*/
-int
-Targ_PrintNode(void *gnp, void *passp)
+void
+Targ_PrintNode(GNode *gn, int *passp)
{
- GNode *gn = (GNode *)gnp;
- int pass = passp ? *(int *)passp : 0;
+ int pass = passp ? *passp : 0;
fprintf(debug_file, "# %s%s, flags %x, type %x, made %d\n",
gn->name, gn->cohort_num, gn->flags, gn->type, gn->made);
if (gn->flags == 0)
- return 0;
+ return;
if (!OP_NOP(gn->type)) {
fprintf(debug_file, "#\n");
@@ -721,7 +715,6 @@ Targ_PrintNode(void *gnp, void *passp)
}
}
}
- return (0);
}
/*-
@@ -730,26 +723,23 @@ Targ_PrintNode(void *gnp, void *passp)
* Print only those targets that are just a source.
*
* Results:
- * 0.
+ * none
*
* Side Effects:
* The name of each file is printed preceded by #\t
*
*-----------------------------------------------------------------------
*/
-static int
-TargPrintOnlySrc(void *gnp, void *dummy MAKE_ATTR_UNUSED)
+static void
+TargPrintOnlySrc(GNode *gn)
{
- GNode *gn = (GNode *)gnp;
if (!OP_NOP(gn->type))
- return 0;
+ return;
fprintf(debug_file, "#\t%s [%s] ",
gn->name, gn->path ? gn->path : gn->name);
Targ_PrintType(gn->type);
fprintf(debug_file, "\n");
-
- return 0;
}
/*-
@@ -771,11 +761,18 @@ TargPrintOnlySrc(void *gnp, void *dummy
void
Targ_PrintGraph(int pass)
{
+ unsigned i, num;
+
fprintf(debug_file, "#*** Input graph:\n");
- Lst_ForEach(allTargets, Targ_PrintNode, &pass);
+ num = glist_num(&allTargets);
+ for (i=0; i<num; i++) {
+ Targ_PrintNode(glist_get(&allTargets, i), &pass);
+ }
fprintf(debug_file, "\n\n");
fprintf(debug_file, "#\n# Files that are only sources:\n");
- Lst_ForEach(allTargets, TargPrintOnlySrc, NULL);
+ for (i=0; i<num; i++) {
+ TargPrintOnlySrc(glist_get(&allTargets, i));
+ }
fprintf(debug_file, "#*** Global Variables:\n");
Var_Dump(VAR_GLOBAL);
fprintf(debug_file, "#*** Command-line Variables:\n");
@@ -796,7 +793,7 @@ Targ_PrintGraph(int pass)
* gnp The node that we are processing.
*
* Results:
- * Always returns 0, for the benefit of Lst_ForEach().
+ * none
*
* Side Effects:
* Information is propagated from this node to cohort or child
@@ -810,18 +807,16 @@ Targ_PrintGraph(int pass)
* predecessor.
*-----------------------------------------------------------------------
*/
-static int
-TargPropagateNode(void *gnp, void *junk MAKE_ATTR_UNUSED)
+static void
+TargPropagateNode(GNode *gn)
{
- GNode *gn = (GNode *)gnp;
unsigned i;
if (gn->type & OP_DOUBLEDEP) {
for (i=0; i<glist_num(&gn->cohorts); i++) {
- TargPropagateCohort(glist_get(&gn->cohorts, i), gnp);
+ TargPropagateCohort(glist_get(&gn->cohorts, i), gn);
}
}
- return (0);
}
/*-
@@ -865,5 +860,10 @@ TargPropagateCohort(GNode *cgn, GNode *p
void
Targ_Propagate(void)
{
- Lst_ForEach(allTargets, TargPropagateNode, NULL);
+ unsigned i, num;
+
+ num = glist_num(&allTargets);
+ for (i=0; i<num; i++) {
+ TargPropagateNode(glist_get(&allTargets, i));
+ }
}
Index: othersrc/usr.bin/dholland-make2/make.h
diff -u othersrc/usr.bin/dholland-make2/make.h:1.8 othersrc/usr.bin/dholland-make2/make.h:1.9
--- othersrc/usr.bin/dholland-make2/make.h:1.8 Tue Mar 5 01:44:34 2013
+++ othersrc/usr.bin/dholland-make2/make.h Tue Mar 5 03:32:08 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: make.h,v 1.8 2013/03/05 01:44:34 dholland Exp $ */
+/* $NetBSD: make.h,v 1.9 2013/03/05 03:32:08 dholland Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -158,9 +158,12 @@
/*
* Global Variables
*/
-extern Lst create; /* The list of target names specified on the
- * command line. used to resolve #if
- * make(...) statements */
+
+/*
+ * The list of target names specified on the command line. Used to
+ * resolve #if make(...) statements.
+ */
+extern struct stringarray create;
/* The list of directories to search when looking for targets */
extern struct patharray dirSearchPath;
@@ -269,12 +272,12 @@ extern int debug;
void Make_TimeStamp(GNode *, GNode *);
Boolean Make_OODate(GNode *);
-void Make_ExpandUse(Lst);
+void Make_ExpandUse(GList *);
time_t Make_Recheck(GNode *);
void Make_HandleUse(GNode *, GNode *);
void Make_Update(GNode *);
void Make_DoAllVar(GNode *);
-Boolean Make_Run(Lst);
+Boolean Make_Run(GList *);
char * Check_Cwd_Cmd(const char *);
void Check_Cwd(const char **);
void PrintOnError(GNode *, const char *);