From 49c1680d0644128c0a4dde65a1b5a57f417a4e6c Mon Sep 17 00:00:00 2001 From: rillig Date: Mon, 22 Feb 2021 23:21:33 +0000 Subject: [PATCH] make: remove freestanding freeIt variables These variables all belong to a string variable. Connect them using FStr, which reduces the number of variables to keep track of. No functional change. --- usr.bin/make/cond.c | 7 +++---- usr.bin/make/meta.c | 18 ++++++++++-------- usr.bin/make/parse.c | 19 +++++++++---------- usr.bin/make/var.c | 31 +++++++++++++++---------------- 4 files changed, 37 insertions(+), 38 deletions(-) diff --git a/usr.bin/make/cond.c b/usr.bin/make/cond.c index 8f36fda22f12..987a03761cae 100644 --- a/usr.bin/make/cond.c +++ b/usr.bin/make/cond.c @@ -1,4 +1,4 @@ -/* $NetBSD: cond.c,v 1.256 2021/02/05 05:15:12 rillig Exp $ */ +/* $NetBSD: cond.c,v 1.257 2021/02/22 23:21:33 rillig Exp $ */ /* * Copyright (c) 1988, 1989, 1990 The Regents of the University of California. @@ -95,7 +95,7 @@ #include "dir.h" /* "@(#)cond.c 8.2 (Berkeley) 1/2/94" */ -MAKE_RCSID("$NetBSD: cond.c,v 1.256 2021/02/05 05:15:12 rillig Exp $"); +MAKE_RCSID("$NetBSD: cond.c,v 1.257 2021/02/22 23:21:33 rillig Exp $"); /* * The parsing of conditional expressions is based on this grammar: @@ -440,7 +440,7 @@ CondParser_StringExpr(CondParser *par, const char *start, } /* * XXX: Can there be any situation in which a returned - * var_Error requires freeIt? + * var_Error needs to be freed? */ FStr_Done(inout_str); /* @@ -473,7 +473,6 @@ CondParser_StringExpr(CondParser *par, const char *start, * Results: * Returns the string, absent any quotes, or NULL on error. * Sets out_quoted if the string was quoted. - * Sets out_freeIt. */ static void CondParser_String(CondParser *par, Boolean doEval, Boolean strictLHS, diff --git a/usr.bin/make/meta.c b/usr.bin/make/meta.c index a12fd049eb3b..4b48ccf36f3f 100644 --- a/usr.bin/make/meta.c +++ b/usr.bin/make/meta.c @@ -1,4 +1,4 @@ -/* $NetBSD: meta.c,v 1.177 2021/02/05 19:19:17 sjg Exp $ */ +/* $NetBSD: meta.c,v 1.178 2021/02/22 23:21:33 rillig Exp $ */ /* * Implement 'meta' mode. @@ -373,17 +373,19 @@ any_is_submake(GNode *gn) } static void -printCMD(const char *cmd, FILE *fp, GNode *gn) +printCMD(const char *ucmd, FILE *fp, GNode *gn) { - char *cmd_freeIt = NULL; + FStr xcmd = FStr_InitRefer(ucmd); - if (strchr(cmd, '$') != NULL) { - (void)Var_Subst(cmd, gn, VARE_WANTRES, &cmd_freeIt); + if (strchr(ucmd, '$') != NULL) { + char *expanded; + (void)Var_Subst(ucmd, gn, VARE_WANTRES, &expanded); /* TODO: handle errors */ - cmd = cmd_freeIt; + xcmd = FStr_InitOwn(expanded); } - fprintf(fp, "CMD %s\n", cmd); - free(cmd_freeIt); + + fprintf(fp, "CMD %s\n", xcmd.str); + FStr_Done(&xcmd); } static void diff --git a/usr.bin/make/parse.c b/usr.bin/make/parse.c index 763ac78cd31a..a8212bfd752e 100644 --- a/usr.bin/make/parse.c +++ b/usr.bin/make/parse.c @@ -1,4 +1,4 @@ -/* $NetBSD: parse.c,v 1.549 2021/02/05 05:46:27 rillig Exp $ */ +/* $NetBSD: parse.c,v 1.550 2021/02/22 23:21:33 rillig Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -109,7 +109,7 @@ #include "pathnames.h" /* "@(#)parse.c 8.3 (Berkeley) 3/19/94" */ -MAKE_RCSID("$NetBSD: parse.c,v 1.549 2021/02/05 05:46:27 rillig Exp $"); +MAKE_RCSID("$NetBSD: parse.c,v 1.550 2021/02/22 23:21:33 rillig Exp $"); /* types and constants */ @@ -2266,25 +2266,24 @@ ParseDoInclude(char *directive) static void SetFilenameVars(const char *filename, const char *dirvar, const char *filevar) { - const char *slash, *dirname, *basename; - void *freeIt; + const char *slash, *basename; + FStr dirname; slash = strrchr(filename, '/'); if (slash == NULL) { - dirname = curdir; + dirname = FStr_InitRefer(curdir); basename = filename; - freeIt = NULL; } else { - dirname = freeIt = bmake_strsedup(filename, slash); + dirname = FStr_InitOwn(bmake_strsedup(filename, slash)); basename = slash + 1; } - Global_SetExpand(dirvar, dirname); + Global_SetExpand(dirvar, dirname.str); Global_SetExpand(filevar, basename); DEBUG5(PARSE, "%s: ${%s} = `%s' ${%s} = `%s'\n", - __func__, dirvar, dirname, filevar, basename); - free(freeIt); + __func__, dirvar, dirname.str, filevar, basename); + FStr_Done(&dirname); } /* diff --git a/usr.bin/make/var.c b/usr.bin/make/var.c index e99246373277..aaaf8f93a13b 100644 --- a/usr.bin/make/var.c +++ b/usr.bin/make/var.c @@ -1,4 +1,4 @@ -/* $NetBSD: var.c,v 1.837 2021/02/22 22:55:43 rillig Exp $ */ +/* $NetBSD: var.c,v 1.838 2021/02/22 23:21:33 rillig Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -140,7 +140,7 @@ #include "metachar.h" /* "@(#)var.c 8.3 (Berkeley) 3/19/94" */ -MAKE_RCSID("$NetBSD: var.c,v 1.837 2021/02/22 22:55:43 rillig Exp $"); +MAKE_RCSID("$NetBSD: var.c,v 1.838 2021/02/22 23:21:33 rillig Exp $"); typedef enum VarFlags { VFL_NONE = 0, @@ -1160,28 +1160,28 @@ Var_Append(GNode *scope, const char *name, const char *val) void Var_AppendExpand(GNode *scope, const char *name, const char *val) { - char *name_freeIt = NULL; + FStr xname = FStr_InitRefer(name); assert(val != NULL); if (strchr(name, '$') != NULL) { - const char *unexpanded_name = name; - (void)Var_Subst(name, scope, VARE_WANTRES, &name_freeIt); + char *expanded; + (void)Var_Subst(name, scope, VARE_WANTRES, &expanded); /* TODO: handle errors */ - name = name_freeIt; - if (name[0] == '\0') { + xname = FStr_InitOwn(expanded); + if (expanded[0] == '\0') { /* TODO: update function name in the debug message */ DEBUG2(VAR, "Var_Append(\"%s\", \"%s\", ...) " "name expands to empty string - ignored\n", - unexpanded_name, val); - free(name_freeIt); + name, val); + FStr_Done(&xname); return; } } - Var_Append(scope, name, val); + Var_Append(scope, xname.str, val); - free(name_freeIt); + FStr_Done(&xname); } void @@ -4146,11 +4146,11 @@ ParseVarnameLong( /* Free the environment variable now since we own it. */ static void -FreeEnvVar(void **out_val_freeIt, Var *v, const char *value) +FreeEnvVar(Var *v, FStr *inout_val) { char *varValue = Buf_DoneData(&v->val); - if (value == varValue) - *out_val_freeIt = varValue; + if (inout_val->str == varValue) + inout_val->freeIt = varValue; else free(varValue); @@ -4194,7 +4194,6 @@ FreeEnvVar(void **out_val_freeIt, Var *v, const char *value) * expression into a defined expression. * XXX: It is not guaranteed that an error message has * been printed. - * *out_val_freeIt Must be freed by the caller after using *out_val. */ /* coverity[+alloc : arg-*4] */ VarParseResult @@ -4311,7 +4310,7 @@ Var_Parse(const char **pp, GNode *scope, VarEvalFlags eflags, FStr *out_val) *pp = p; if (v->flags & VFL_FROM_ENV) { - FreeEnvVar(&expr.value.freeIt, v, expr.value.str); + FreeEnvVar(v, &expr.value); } else if (expr.defined != DEF_REGULAR) { if (expr.defined == DEF_UNDEF) {