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