summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorharti <harti@FreeBSD.org>2005-02-04 12:10:20 +0000
committerharti <harti@FreeBSD.org>2005-02-04 12:10:20 +0000
commitec85d83f9fd990ec2f3c7d7a5a7dd0cd596c63e1 (patch)
tree744ee92cbbe31eaf1efd6c0b740e94c830100aa1
parent63e5ce49451915d92cd2f7018392d902f005131d (diff)
downloadFreeBSD-src-ec85d83f9fd990ec2f3c7d7a5a7dd0cd596c63e1.zip
FreeBSD-src-ec85d83f9fd990ec2f3c7d7a5a7dd0cd596c63e1.tar.gz
Further constification. Use a temporary hack (copying the input string)
until Var_Subst is fixed. Submitted by: Max Okumoto <okumoto@ucsd.edu>
-rw-r--r--usr.bin/make/var.c82
-rw-r--r--usr.bin/make/var.h12
2 files changed, 52 insertions, 42 deletions
diff --git a/usr.bin/make/var.c b/usr.bin/make/var.c
index d212340..227ccd7 100644
--- a/usr.bin/make/var.c
+++ b/usr.bin/make/var.c
@@ -136,9 +136,6 @@ GNode *VAR_CMD; /* variables defined on the command-line */
#define FIND_GLOBAL 0x2 /* look in VAR_GLOBAL as well */
#define FIND_ENV 0x4 /* look in the environment also */
-static void VarPossiblyExpand(char **, GNode *);
-static Var *VarFind(const char *, GNode *, int);
-static void VarAdd(const char *, const char *, GNode *);
static void VarDelete(void *);
static char *VarGetPattern(GNode *, int, char **, int, int *, size_t *,
VarPattern *);
@@ -179,14 +176,23 @@ VarCmp(const void *v, const void *name)
* The caller must free the new contents or old contents of name.
*-----------------------------------------------------------------------
*/
-static void
-VarPossiblyExpand(char **name, GNode *ctxt)
+static char *
+VarPossiblyExpand(const char *name, GNode *ctxt)
{
+ char *tmp;
+ char *result;
- if (strchr(*name, '$') != NULL)
- *name = Var_Subst(NULL, *name, ctxt, 0);
- else
- *name = estrdup(*name);
+ /*
+ * XXX make a temporary copy of the name because Var_Subst insists
+ * on writing into the string.
+ */
+ tmp = estrdup(name);
+ if (strchr(name, '$') != NULL) {
+ result = Var_Subst(NULL, tmp, ctxt, 0);
+ free(tmp);
+ return (result);
+ } else
+ return (tmp);
}
/*-
@@ -381,7 +387,7 @@ VarDelete(void *vp)
*-----------------------------------------------------------------------
*/
void
-Var_Delete(char *name, GNode *ctxt)
+Var_Delete(const char *name, GNode *ctxt)
{
LstNode *ln;
@@ -415,33 +421,34 @@ Var_Delete(char *name, GNode *ctxt)
*-----------------------------------------------------------------------
*/
void
-Var_Set(char *name, const char *val, GNode *ctxt)
+Var_Set(const char *name, const char *val, GNode *ctxt)
{
- Var *v;
+ Var *v;
+ char *n;
/*
* We only look for a variable in the given context since anything set
* here will override anything in a lower context, so there's not much
* point in searching them all just to save a bit of memory...
*/
- VarPossiblyExpand(&name, ctxt);
- v = VarFind(name, ctxt, 0);
+ n = VarPossiblyExpand(name, ctxt);
+ v = VarFind(n, ctxt, 0);
if (v == NULL) {
- VarAdd(name, val, ctxt);
+ VarAdd(n, val, ctxt);
} else {
Buf_Discard(v->val, Buf_Size(v->val));
- Buf_AddBytes(v->val, strlen(val), (Byte *)val);
+ Buf_AddBytes(v->val, strlen(val), (const Byte *)val);
- DEBUGF(VAR, ("%s:%s = %s\n", ctxt->name, name, val));
+ DEBUGF(VAR, ("%s:%s = %s\n", ctxt->name, n, val));
}
/*
* Any variables given on the command line are automatically exported
* to the environment (as per POSIX standard)
*/
if (ctxt == VAR_CMD) {
- setenv(name, val, 1);
+ setenv(n, val, 1);
}
- free(name);
+ free(n);
}
/*-
@@ -467,20 +474,21 @@ Var_Set(char *name, const char *val, GNode *ctxt)
*-----------------------------------------------------------------------
*/
void
-Var_Append(char *name, const char *val, GNode *ctxt)
+Var_Append(const char *name, const char *val, GNode *ctxt)
{
- Var *v;
+ Var *v;
+ char *n;
- VarPossiblyExpand(&name, ctxt);
- v = VarFind(name, ctxt, (ctxt == VAR_GLOBAL) ? FIND_ENV : 0);
+ n = VarPossiblyExpand(name, ctxt);
+ v = VarFind(n, ctxt, (ctxt == VAR_GLOBAL) ? FIND_ENV : 0);
if (v == NULL) {
- VarAdd(name, val, ctxt);
+ VarAdd(n, val, ctxt);
} else {
Buf_AddByte(v->val, (Byte)' ');
- Buf_AddBytes(v->val, strlen(val), (Byte *)val);
+ Buf_AddBytes(v->val, strlen(val), (const Byte *)val);
- DEBUGF(VAR, ("%s:%s = %s\n", ctxt->name, name,
+ DEBUGF(VAR, ("%s:%s = %s\n", ctxt->name, n,
(char *)Buf_GetAll(v->val, (size_t *)NULL)));
if (v->flags & VAR_FROM_ENV) {
@@ -494,7 +502,7 @@ Var_Append(char *name, const char *val, GNode *ctxt)
Lst_AtFront(&ctxt->context, v);
}
}
- free(name);
+ free(n);
}
/*-
@@ -511,13 +519,14 @@ Var_Append(char *name, const char *val, GNode *ctxt)
*-----------------------------------------------------------------------
*/
Boolean
-Var_Exists(char *name, GNode *ctxt)
+Var_Exists(const char *name, GNode *ctxt)
{
Var *v;
+ char *n;
- VarPossiblyExpand(&name, ctxt);
- v = VarFind(name, ctxt, FIND_CMD|FIND_GLOBAL|FIND_ENV);
- free(name);
+ n = VarPossiblyExpand(name, ctxt);
+ v = VarFind(n, ctxt, FIND_CMD|FIND_GLOBAL|FIND_ENV);
+ free(n);
if (v == NULL) {
return (FALSE);
@@ -542,13 +551,14 @@ Var_Exists(char *name, GNode *ctxt)
*-----------------------------------------------------------------------
*/
char *
-Var_Value(char *name, GNode *ctxt, char **frp)
+Var_Value(const char *name, GNode *ctxt, char **frp)
{
Var *v;
+ char *n;
- VarPossiblyExpand(&name, ctxt);
- v = VarFind(name, ctxt, FIND_ENV | FIND_GLOBAL | FIND_CMD);
- free(name);
+ n = VarPossiblyExpand(name, ctxt);
+ v = VarFind(n, ctxt, FIND_ENV | FIND_GLOBAL | FIND_CMD);
+ free(n);
*frp = NULL;
if (v != NULL) {
char *p = (char *)Buf_GetAll(v->val, (size_t *)NULL);
@@ -1720,7 +1730,7 @@ Var_Parse(char *str, GNode *ctxt, Boolean err, size_t *lengthPtr,
*-----------------------------------------------------------------------
*/
char *
-Var_Subst(char *var, char *str, GNode *ctxt, Boolean undefErr)
+Var_Subst(const char *var, char *str, GNode *ctxt, Boolean undefErr)
{
Buffer *buf; /* Buffer for forming things */
char *val; /* Value to substitute for a variable */
diff --git a/usr.bin/make/var.h b/usr.bin/make/var.h
index 64ef85d..b2832cc 100644
--- a/usr.bin/make/var.h
+++ b/usr.bin/make/var.h
@@ -109,14 +109,14 @@ Boolean VarNoMatch(const char *, Boolean, struct Buffer *, void *);
Boolean VarRESubstitute(const char *, Boolean, struct Buffer *, void *);
Boolean VarSubstitute(const char *, Boolean, struct Buffer *, void *);
-void Var_Delete(char *, struct GNode *);
-void Var_Set(char *, const char *, struct GNode *);
-void Var_Append(char *, const char *, struct GNode *);
-Boolean Var_Exists(char *, struct GNode *);
-char *Var_Value(char *, struct GNode *, char **);
+void Var_Delete(const char *, struct GNode *);
+void Var_Set(const char *, const char *, struct GNode *);
+void Var_Append(const char *, const char *, struct GNode *);
+Boolean Var_Exists(const char *, struct GNode *);
+char *Var_Value(const char *, struct GNode *, char **);
char *Var_Quote(const char *);
char *Var_Parse(char *, struct GNode *, Boolean, size_t *, Boolean *);
-char *Var_Subst(char *, char *, struct GNode *, Boolean);
+char *Var_Subst(const char *, char *, struct GNode *, Boolean);
char *Var_GetTail(char *);
char *Var_GetHead(char *);
void Var_Init(void);
OpenPOWER on IntegriCloud