Module Name: src Committed By: rillig Date: Sun Dec 20 14:32:14 UTC 2020
Modified Files: src/usr.bin/make: cond.c main.c meta.c nonints.h parse.c trace.c var.c Log Message: make(1): change return type of Var_Value to FStr To generate a diff of this commit: cvs rdiff -u -r1.229 -r1.230 src/usr.bin/make/cond.c cvs rdiff -u -r1.498 -r1.499 src/usr.bin/make/main.c cvs rdiff -u -r1.160 -r1.161 src/usr.bin/make/meta.c cvs rdiff -u -r1.177 -r1.178 src/usr.bin/make/nonints.h cvs rdiff -u -r1.504 -r1.505 src/usr.bin/make/parse.c cvs rdiff -u -r1.24 -r1.25 src/usr.bin/make/trace.c cvs rdiff -u -r1.744 -r1.745 src/usr.bin/make/var.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.bin/make/cond.c diff -u src/usr.bin/make/cond.c:1.229 src/usr.bin/make/cond.c:1.230 --- src/usr.bin/make/cond.c:1.229 Sun Dec 20 13:38:43 2020 +++ src/usr.bin/make/cond.c Sun Dec 20 14:32:13 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: cond.c,v 1.229 2020/12/20 13:38:43 rillig Exp $ */ +/* $NetBSD: cond.c,v 1.230 2020/12/20 14:32:13 rillig Exp $ */ /* * Copyright (c) 1988, 1989, 1990 The Regents of the University of California. @@ -94,7 +94,7 @@ #include "dir.h" /* "@(#)cond.c 8.2 (Berkeley) 1/2/94" */ -MAKE_RCSID("$NetBSD: cond.c,v 1.229 2020/12/20 13:38:43 rillig Exp $"); +MAKE_RCSID("$NetBSD: cond.c,v 1.230 2020/12/20 14:32:13 rillig Exp $"); /* * The parsing of conditional expressions is based on this grammar: @@ -286,9 +286,9 @@ ParseFuncArg(const char **pp, Boolean do static Boolean FuncDefined(size_t argLen MAKE_ATTR_UNUSED, const char *arg) { - void *freeIt; - Boolean result = Var_Value(arg, VAR_CMDLINE, &freeIt) != NULL; - bmake_free(freeIt); + FStr value = Var_Value(arg, VAR_CMDLINE); + Boolean result = value.str != NULL; + FStr_Done(&value); return result; } Index: src/usr.bin/make/main.c diff -u src/usr.bin/make/main.c:1.498 src/usr.bin/make/main.c:1.499 --- src/usr.bin/make/main.c:1.498 Sun Dec 13 20:14:48 2020 +++ src/usr.bin/make/main.c Sun Dec 20 14:32:13 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: main.c,v 1.498 2020/12/13 20:14:48 rillig Exp $ */ +/* $NetBSD: main.c,v 1.499 2020/12/20 14:32:13 rillig Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -109,7 +109,7 @@ #include "trace.h" /* "@(#)main.c 8.3 (Berkeley) 3/19/94" */ -MAKE_RCSID("$NetBSD: main.c,v 1.498 2020/12/13 20:14:48 rillig Exp $"); +MAKE_RCSID("$NetBSD: main.c,v 1.499 2020/12/20 14:32:13 rillig Exp $"); #if defined(MAKE_NATIVE) && !defined(lint) __COPYRIGHT("@(#) Copyright (c) 1988, 1989, 1990, 1993 " "The Regents of the University of California. " @@ -690,10 +690,9 @@ Main_ParseArgLine(const char *line) return; { - void *freeIt; - const char *argv0 = Var_Value(".MAKE", VAR_GLOBAL, &freeIt); - buf = str_concat3(argv0, " ", line); - free(freeIt); + FStr argv0 = Var_Value(".MAKE", VAR_GLOBAL); + buf = str_concat3(argv0.str, " ", line); + FStr_Done(&argv0); } words = Str_Words(buf, TRUE); @@ -751,29 +750,27 @@ Main_SetObjdir(Boolean writable, const c static Boolean SetVarObjdir(Boolean writable, const char *var, const char *suffix) { - void *path_freeIt; - const char *path = Var_Value(var, VAR_CMDLINE, &path_freeIt); - const char *xpath; - char *xpath_freeIt; + FStr path = Var_Value(var, VAR_CMDLINE); + FStr xpath; - if (path == NULL || path[0] == '\0') { - bmake_free(path_freeIt); + if (path.str == NULL || path.str[0] == '\0') { + FStr_Done(&path); return FALSE; } /* expand variable substitutions */ - xpath = path; - xpath_freeIt = NULL; - if (strchr(path, '$') != 0) { - (void)Var_Subst(path, VAR_GLOBAL, VARE_WANTRES, &xpath_freeIt); + xpath = FStr_InitRefer(path.str); + if (strchr(path.str, '$') != 0) { + char *expanded; + (void)Var_Subst(path.str, VAR_GLOBAL, VARE_WANTRES, &expanded); /* TODO: handle errors */ - xpath = xpath_freeIt; + xpath = FStr_InitOwn(expanded); } - (void)Main_SetObjdir(writable, "%s%s", xpath, suffix); + (void)Main_SetObjdir(writable, "%s%s", xpath.str, suffix); - bmake_free(xpath_freeIt); - bmake_free(path_freeIt); + FStr_Done(&xpath); + FStr_Done(&path); return TRUE; } @@ -859,10 +856,9 @@ PrintVar(const char *varname, Boolean ex bmake_free(evalue); } else { - void *freeIt; - const char *value = Var_Value(varname, VAR_GLOBAL, &freeIt); - printf("%s\n", value ? value : ""); - bmake_free(freeIt); + FStr value = Var_Value(varname, VAR_GLOBAL); + printf("%s\n", value.str != NULL ? value.str : ""); + FStr_Done(&value); } } @@ -1047,21 +1043,20 @@ static void HandlePWD(const struct stat *curdir_st) { char *pwd; - void *prefix_freeIt, *makeobjdir_freeIt; - const char *makeobjdir; + FStr prefix, makeobjdir; struct stat pwd_st; if (ignorePWD || (pwd = getenv("PWD")) == NULL) return; - if (Var_Value("MAKEOBJDIRPREFIX", VAR_CMDLINE, &prefix_freeIt) != - NULL) { - bmake_free(prefix_freeIt); + prefix = Var_Value("MAKEOBJDIRPREFIX", VAR_CMDLINE); + if (prefix.str != NULL) { + FStr_Done(&prefix); return; } - makeobjdir = Var_Value("MAKEOBJDIR", VAR_CMDLINE, &makeobjdir_freeIt); - if (makeobjdir != NULL && strchr(makeobjdir, '$') != NULL) + makeobjdir = Var_Value("MAKEOBJDIR", VAR_CMDLINE); + if (makeobjdir.str != NULL && strchr(makeobjdir.str, '$') != NULL) goto ignore_pwd; if (stat(pwd, &pwd_st) == 0 && @@ -1070,7 +1065,7 @@ HandlePWD(const struct stat *curdir_st) (void)strncpy(curdir, pwd, MAXPATHLEN); ignore_pwd: - bmake_free(makeobjdir_freeIt); + FStr_Done(&makeobjdir); } #endif @@ -1554,10 +1549,9 @@ main_PrepareMaking(void) MakeMode(NULL); { - void *freeIt; - Var_Append("MFLAGS", Var_Value(MAKEFLAGS, VAR_GLOBAL, &freeIt), - VAR_GLOBAL); - bmake_free(freeIt); + FStr makeflags = Var_Value(MAKEFLAGS, VAR_GLOBAL); + Var_Append("MFLAGS", makeflags.str, VAR_GLOBAL); + FStr_Done(&makeflags); } InitMaxJobs(); Index: src/usr.bin/make/meta.c diff -u src/usr.bin/make/meta.c:1.160 src/usr.bin/make/meta.c:1.161 --- src/usr.bin/make/meta.c:1.160 Sun Dec 13 21:27:45 2020 +++ src/usr.bin/make/meta.c Sun Dec 20 14:32:13 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: meta.c,v 1.160 2020/12/13 21:27:45 rillig Exp $ */ +/* $NetBSD: meta.c,v 1.161 2020/12/20 14:32:13 rillig Exp $ */ /* * Implement 'meta' mode. @@ -323,8 +323,7 @@ is_submake(const char *cmd, GNode *gn) Boolean rc = FALSE; if (p_make == NULL) { - void *dontFreeIt; - p_make = Var_Value(".MAKE", gn, &dontFreeIt); + p_make = Var_Value(".MAKE", gn).str; p_len = strlen(p_make); } cp = strchr(cmd, '$'); @@ -473,21 +472,20 @@ meta_create(BuildMon *pbm, GNode *gn) char buf[MAXPATHLEN]; char objdir_realpath[MAXPATHLEN]; char **ptr; - const char *dname; + FStr dname; const char *tname; char *fname; const char *cp; - void *dname_freeIt; fp = NULL; - dname = Var_Value(".OBJDIR", gn, &dname_freeIt); + dname = Var_Value(".OBJDIR", gn); tname = GNode_VarTarget(gn); /* if this succeeds objdir_realpath is realpath of dname */ - if (!meta_needed(gn, dname, objdir_realpath, TRUE)) + if (!meta_needed(gn, dname.str, objdir_realpath, TRUE)) goto out; - dname = objdir_realpath; + dname.str = objdir_realpath; if (metaVerbose) { char *mp; @@ -509,7 +507,7 @@ meta_create(BuildMon *pbm, GNode *gn) goto out; fname = meta_name(pbm->meta_fname, sizeof pbm->meta_fname, - dname, tname, objdir_realpath); + dname.str, tname, objdir_realpath); #ifdef DEBUG_META_MODE DEBUG1(META, "meta_create: %s\n", fname); @@ -544,7 +542,7 @@ meta_create(BuildMon *pbm, GNode *gn) gn->type |= OP_SILENT; } out: - bmake_free(dname_freeIt); + FStr_Done(&dname); return fp; } @@ -588,7 +586,7 @@ meta_mode_init(const char *make_mode) { static Boolean once = FALSE; char *cp; - void *freeIt; + FStr value; useMeta = TRUE; useFilemon = TRUE; @@ -644,15 +642,15 @@ meta_mode_init(const char *make_mode) /* * We ignore any paths that match ${.MAKE.META.IGNORE_PATTERNS} */ - freeIt = NULL; - if (Var_Value(MAKE_META_IGNORE_PATTERNS, VAR_GLOBAL, &freeIt)) { + value = Var_Value(MAKE_META_IGNORE_PATTERNS, VAR_GLOBAL); + if (value.str != NULL) { metaIgnorePatterns = TRUE; - bmake_free(freeIt); + FStr_Done(&value); } - freeIt = NULL; - if (Var_Value(MAKE_META_IGNORE_FILTER, VAR_GLOBAL, &freeIt)) { + value = Var_Value(MAKE_META_IGNORE_FILTER, VAR_GLOBAL); + if (value.str != NULL) { metaIgnoreFilter = TRUE; - bmake_free(freeIt); + FStr_Done(&value); } } @@ -1075,7 +1073,7 @@ meta_oodate(GNode *gn, Boolean oodate) char fname1[MAXPATHLEN]; char fname2[MAXPATHLEN]; char fname3[MAXPATHLEN]; - const char *dname; + FStr dname; const char *tname; char *p; char *cp; @@ -1087,18 +1085,17 @@ meta_oodate(GNode *gn, Boolean oodate) Boolean needOODATE = FALSE; StringList missingFiles; Boolean have_filemon = FALSE; - void *objdir_freeIt; if (oodate) return oodate; /* we're done */ - dname = Var_Value(".OBJDIR", gn, &objdir_freeIt); + dname = Var_Value(".OBJDIR", gn); tname = GNode_VarTarget(gn); /* if this succeeds fname3 is realpath of dname */ - if (!meta_needed(gn, dname, fname3, FALSE)) + if (!meta_needed(gn, dname.str, fname3, FALSE)) goto oodate_out; - dname = fname3; + dname.str = fname3; Lst_Init(&missingFiles); @@ -1110,7 +1107,7 @@ meta_oodate(GNode *gn, Boolean oodate) */ Make_DoAllVar(gn); - meta_name(fname, sizeof fname, dname, tname, dname); + meta_name(fname, sizeof fname, dname.str, tname, dname.str); #ifdef DEBUG_META_MODE DEBUG1(META, "meta_oodate: %s\n", fname); @@ -1216,8 +1213,7 @@ meta_oodate(GNode *gn, Boolean oodate) CHECK_VALID_META(p); pid = atoi(p); if (pid > 0 && pid != lastpid) { - const char *ldir; - void *tp; + FStr ldir; if (lastpid > 0) { /* We need to remember these. */ @@ -1227,15 +1223,15 @@ meta_oodate(GNode *gn, Boolean oodate) snprintf(lcwd_vname, sizeof lcwd_vname, LCWD_VNAME_FMT, pid); snprintf(ldir_vname, sizeof ldir_vname, LDIR_VNAME_FMT, pid); lastpid = pid; - ldir = Var_Value(ldir_vname, VAR_GLOBAL, &tp); - if (ldir != NULL) { - strlcpy(latestdir, ldir, sizeof latestdir); - bmake_free(tp); + ldir = Var_Value(ldir_vname, VAR_GLOBAL); + if (ldir.str != NULL) { + strlcpy(latestdir, ldir.str, sizeof latestdir); + FStr_Done(&ldir); } - ldir = Var_Value(lcwd_vname, VAR_GLOBAL, &tp); - if (ldir != NULL) { - strlcpy(lcwd, ldir, sizeof lcwd); - bmake_free(tp); + ldir = Var_Value(lcwd_vname, VAR_GLOBAL); + if (ldir.str != NULL) { + strlcpy(lcwd, ldir.str, sizeof lcwd); + FStr_Done(&ldir); } } /* Skip past the pid. */ @@ -1606,7 +1602,7 @@ meta_oodate(GNode *gn, Boolean oodate) } oodate_out: - bmake_free(objdir_freeIt); + FStr_Done(&dname); return oodate; } Index: src/usr.bin/make/nonints.h diff -u src/usr.bin/make/nonints.h:1.177 src/usr.bin/make/nonints.h:1.178 --- src/usr.bin/make/nonints.h:1.177 Sun Dec 20 13:38:43 2020 +++ src/usr.bin/make/nonints.h Sun Dec 20 14:32:13 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: nonints.h,v 1.177 2020/12/20 13:38:43 rillig Exp $ */ +/* $NetBSD: nonints.h,v 1.178 2020/12/20 14:32:13 rillig Exp $ */ /*- * Copyright (c) 1988, 1989, 1990, 1993 @@ -402,7 +402,7 @@ void Var_Set(const char *, const char *, void Var_SetWithFlags(const char *, const char *, GNode *, VarSetFlags); void Var_Append(const char *, const char *, GNode *); Boolean Var_Exists(const char *, GNode *); -const char *Var_Value(const char *, GNode *, void **); +FStr Var_Value(const char *, GNode *); const char *Var_ValueDirect(const char *, GNode *); VarParseResult Var_Parse(const char **, GNode *, VarEvalFlags, FStr *); VarParseResult Var_Subst(const char *, GNode *, VarEvalFlags, char **); Index: src/usr.bin/make/parse.c diff -u src/usr.bin/make/parse.c:1.504 src/usr.bin/make/parse.c:1.505 --- src/usr.bin/make/parse.c:1.504 Sun Dec 20 13:38:43 2020 +++ src/usr.bin/make/parse.c Sun Dec 20 14:32:13 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: parse.c,v 1.504 2020/12/20 13:38:43 rillig Exp $ */ +/* $NetBSD: parse.c,v 1.505 2020/12/20 14:32:13 rillig Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -117,7 +117,7 @@ #include "pathnames.h" /* "@(#)parse.c 8.3 (Berkeley) 3/19/94" */ -MAKE_RCSID("$NetBSD: parse.c,v 1.504 2020/12/20 13:38:43 rillig Exp $"); +MAKE_RCSID("$NetBSD: parse.c,v 1.505 2020/12/20 14:32:13 rillig Exp $"); /* types and constants */ @@ -614,8 +614,7 @@ static void PrintLocation(FILE *f, const char *fname, size_t lineno) { char dirbuf[MAXPATHLEN + 1]; - const char *dir, *base; - void *dir_freeIt, *base_freeIt; + FStr dir, base; if (*fname == '/' || strcmp(fname, "(stdin)") == 0) { (void)fprintf(f, "\"%s\" line %u: ", fname, (unsigned)lineno); @@ -625,19 +624,21 @@ PrintLocation(FILE *f, const char *fname /* Find out which makefile is the culprit. * We try ${.PARSEDIR} and apply realpath(3) if not absolute. */ - dir = Var_Value(".PARSEDIR", VAR_GLOBAL, &dir_freeIt); - if (dir == NULL) - dir = "."; - if (*dir != '/') - dir = realpath(dir, dirbuf); - - base = Var_Value(".PARSEFILE", VAR_GLOBAL, &base_freeIt); - if (base == NULL) - base = str_basename(fname); - - (void)fprintf(f, "\"%s/%s\" line %u: ", dir, base, (unsigned)lineno); - bmake_free(base_freeIt); - bmake_free(dir_freeIt); + dir = Var_Value(".PARSEDIR", VAR_GLOBAL); + if (dir.str == NULL) + dir.str = "."; + if (dir.str[0] != '/') + dir.str = realpath(dir.str, dirbuf); + + base = Var_Value(".PARSEFILE", VAR_GLOBAL); + if (base.str == NULL) + base.str = str_basename(fname); + + (void)fprintf(f, "\"%s/%s\" line %u: ", + dir.str, base.str, (unsigned)lineno); + + FStr_Done(&base); + FStr_Done(&dir); } static void @@ -2404,10 +2405,9 @@ StrContainsWord(const char *str, const c static Boolean VarContainsWord(const char *varname, const char *word) { - void *val_freeIt; - const char *val = Var_Value(varname, VAR_GLOBAL, &val_freeIt); - Boolean found = val != NULL && StrContainsWord(val, word); - bmake_free(val_freeIt); + FStr val = Var_Value(varname, VAR_GLOBAL); + Boolean found = val.str != NULL && StrContainsWord(val.str, word); + FStr_Done(&val); return found; } Index: src/usr.bin/make/trace.c diff -u src/usr.bin/make/trace.c:1.24 src/usr.bin/make/trace.c:1.25 --- src/usr.bin/make/trace.c:1.24 Sat Dec 12 10:21:50 2020 +++ src/usr.bin/make/trace.c Sun Dec 20 14:32:13 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: trace.c,v 1.24 2020/12/12 10:21:50 rillig Exp $ */ +/* $NetBSD: trace.c,v 1.25 2020/12/20 14:32:13 rillig Exp $ */ /*- * Copyright (c) 2000 The NetBSD Foundation, Inc. @@ -48,7 +48,7 @@ #include "job.h" #include "trace.h" -MAKE_RCSID("$NetBSD: trace.c,v 1.24 2020/12/12 10:21:50 rillig Exp $"); +MAKE_RCSID("$NetBSD: trace.c,v 1.25 2020/12/20 14:32:13 rillig Exp $"); static FILE *trfile; static pid_t trpid; @@ -67,11 +67,12 @@ void Trace_Init(const char *pathname) { if (pathname != NULL) { - void *dontFreeIt; + FStr curDir; trpid = getpid(); /* XXX: This variable may get overwritten later, which * would make trwd point to undefined behavior. */ - trwd = Var_Value(".CURDIR", VAR_GLOBAL, &dontFreeIt); + curDir = Var_Value(".CURDIR", VAR_GLOBAL); + trwd = curDir.str; trfile = fopen(pathname, "a"); } Index: src/usr.bin/make/var.c diff -u src/usr.bin/make/var.c:1.744 src/usr.bin/make/var.c:1.745 --- src/usr.bin/make/var.c:1.744 Sun Dec 20 13:50:10 2020 +++ src/usr.bin/make/var.c Sun Dec 20 14:32:13 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: var.c,v 1.744 2020/12/20 13:50:10 rillig Exp $ */ +/* $NetBSD: var.c,v 1.745 2020/12/20 14:32:13 rillig Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -131,7 +131,7 @@ #include "metachar.h" /* "@(#)var.c 8.3 (Berkeley) 3/19/94" */ -MAKE_RCSID("$NetBSD: var.c,v 1.744 2020/12/20 13:50:10 rillig Exp $"); +MAKE_RCSID("$NetBSD: var.c,v 1.745 2020/12/20 14:32:13 rillig Exp $"); typedef enum VarFlags { VAR_NONE = 0, @@ -1105,20 +1105,19 @@ Var_Exists(const char *name, GNode *ctxt * If the returned value is not NULL, the caller must free * out_freeIt when the returned value is no longer needed. */ -const char * -Var_Value(const char *name, GNode *ctxt, void **out_freeIt) +FStr +Var_Value(const char *name, GNode *ctxt) { Var *v = VarFind(name, ctxt, TRUE); char *value; - *out_freeIt = NULL; if (v == NULL) - return NULL; + return FStr_InitRefer(NULL); value = Buf_GetAll(&v->val, NULL); - if (VarFreeEnv(v, FALSE)) - *out_freeIt = value; - return value; + return VarFreeEnv(v, FALSE) + ? FStr_InitOwn(value) + : FStr_InitRefer(value); } /* Return the unexpanded variable value from this node, without trying to look