version 1.312, 2020/07/26 13:39:30 |
version 1.313, 2020/07/26 15:09:10 |
|
|
static Var * |
static Var * |
VarFind(const char *name, GNode *ctxt, VarFindFlags flags) |
VarFind(const char *name, GNode *ctxt, VarFindFlags flags) |
{ |
{ |
Hash_Entry *var; |
|
Var *v; |
|
|
|
/* |
/* |
* If the variable name begins with a '.', it could very well be one of |
* If the variable name begins with a '.', it could very well be one of |
* the local ones. We check the name against all the local variables |
* the local ones. We check the name against all the local variables |
Line 330 VarFind(const char *name, GNode *ctxt, V |
|
Line 327 VarFind(const char *name, GNode *ctxt, V |
|
* look for it in VAR_CMD, VAR_GLOBAL and the environment, in that order, |
* look for it in VAR_CMD, VAR_GLOBAL and the environment, in that order, |
* depending on the FIND_* flags in 'flags' |
* depending on the FIND_* flags in 'flags' |
*/ |
*/ |
var = Hash_FindEntry(&ctxt->context, name); |
Hash_Entry *var = Hash_FindEntry(&ctxt->context, name); |
|
|
if (var == NULL && (flags & FIND_CMD) && ctxt != VAR_CMD) { |
if (var == NULL && (flags & FIND_CMD) && ctxt != VAR_CMD) { |
var = Hash_FindEntry(&VAR_CMD->context, name); |
var = Hash_FindEntry(&VAR_CMD->context, name); |
Line 348 VarFind(const char *name, GNode *ctxt, V |
|
Line 345 VarFind(const char *name, GNode *ctxt, V |
|
char *env; |
char *env; |
|
|
if ((env = getenv(name)) != NULL) { |
if ((env = getenv(name)) != NULL) { |
int len; |
Var *v = bmake_malloc(sizeof(Var)); |
|
|
v = bmake_malloc(sizeof(Var)); |
|
v->name = bmake_strdup(name); |
v->name = bmake_strdup(name); |
|
|
len = strlen(env); |
int len = (int)strlen(env); |
|
|
Buf_Init(&v->val, len + 1); |
Buf_Init(&v->val, len + 1); |
Buf_AddBytes(&v->val, len, env); |
Buf_AddBytes(&v->val, len, env); |
|
|
Line 428 VarFreeEnv(Var *v, Boolean destroy) |
|
Line 422 VarFreeEnv(Var *v, Boolean destroy) |
|
static void |
static void |
VarAdd(const char *name, const char *val, GNode *ctxt) |
VarAdd(const char *name, const char *val, GNode *ctxt) |
{ |
{ |
Var *v; |
Var *v = bmake_malloc(sizeof(Var)); |
int len; |
|
Hash_Entry *h; |
|
|
|
v = bmake_malloc(sizeof(Var)); |
|
|
|
len = val != NULL ? strlen(val) : 0; |
int len = val != NULL ? (int)strlen(val) : 0; |
Buf_Init(&v->val, len + 1); |
Buf_Init(&v->val, len + 1); |
Buf_AddBytes(&v->val, len, val); |
Buf_AddBytes(&v->val, len, val); |
|
|
v->flags = 0; |
v->flags = 0; |
|
|
h = Hash_CreateEntry(&ctxt->context, name, NULL); |
Hash_Entry *h = Hash_CreateEntry(&ctxt->context, name, NULL); |
Hash_SetValue(h, v); |
Hash_SetValue(h, v); |
v->name = h->name; |
v->name = h->name; |
if (DEBUG(VAR) && !(ctxt->flags & INTERNAL)) { |
if (DEBUG(VAR) && !(ctxt->flags & INTERNAL)) { |
Line 838 Var_Set_with_flags(const char *name, con |
|
Line 828 Var_Set_with_flags(const char *name, con |
|
} else { |
} else { |
Buf_Empty(&v->val); |
Buf_Empty(&v->val); |
if (val) |
if (val) |
Buf_AddBytes(&v->val, strlen(val), val); |
Buf_AddStr(&v->val, val); |
|
|
if (DEBUG(VAR)) { |
if (DEBUG(VAR)) { |
fprintf(debug_file, "%s:%s = %s\n", ctxt->name, name, val); |
fprintf(debug_file, "%s:%s = %s\n", ctxt->name, name, val); |
Line 960 Var_Append(const char *name, const char |
|
Line 950 Var_Append(const char *name, const char |
|
Var_Set(name, val, ctxt); |
Var_Set(name, val, ctxt); |
} else if (ctxt == VAR_CMD || !(v->flags & VAR_FROM_CMD)) { |
} else if (ctxt == VAR_CMD || !(v->flags & VAR_FROM_CMD)) { |
Buf_AddByte(&v->val, ' '); |
Buf_AddByte(&v->val, ' '); |
Buf_AddBytes(&v->val, strlen(val), val); |
Buf_AddStr(&v->val, val); |
|
|
if (DEBUG(VAR)) { |
if (DEBUG(VAR)) { |
fprintf(debug_file, "%s:%s = %s\n", ctxt->name, name, |
fprintf(debug_file, "%s:%s = %s\n", ctxt->name, name, |
Line 1700 VarOrder(const char *str, const char oty |
|
Line 1690 VarOrder(const char *str, const char oty |
|
} |
} |
|
|
for (i = 0; i < ac; i++) { |
for (i = 0; i < ac; i++) { |
Buf_AddBytes(&buf, strlen(av[i]), av[i]); |
Buf_AddStr(&buf, av[i]); |
if (i != ac - 1) |
if (i != ac - 1) |
Buf_AddByte(&buf, ' '); |
Buf_AddByte(&buf, ' '); |
} |
} |
Line 1747 VarUniq(const char *str) |
|
Line 1737 VarUniq(const char *str) |
|
} |
} |
|
|
for (i = 0; i < ac; i++) { |
for (i = 0; i < ac; i++) { |
Buf_AddBytes(&buf, strlen(av[i]), av[i]); |
Buf_AddStr(&buf, av[i]); |
if (i != ac - 1) |
if (i != ac - 1) |
Buf_AddByte(&buf, ' '); |
Buf_AddByte(&buf, ' '); |
} |
} |
Line 1862 ParseModifierPart(GNode *ctxt, const cha |
|
Line 1852 ParseModifierPart(GNode *ctxt, const cha |
|
*/ |
*/ |
cp2 = Var_Parse(cp, ctxt, errnum | (eflags & VARE_WANTRES), |
cp2 = Var_Parse(cp, ctxt, errnum | (eflags & VARE_WANTRES), |
&len, &freeIt); |
&len, &freeIt); |
Buf_AddBytes(&buf, strlen(cp2), cp2); |
Buf_AddStr(&buf, cp2); |
free(freeIt); |
free(freeIt); |
cp += len - 1; |
cp += len - 1; |
} else { |
} else { |
Line 1886 ParseModifierPart(GNode *ctxt, const cha |
|
Line 1876 ParseModifierPart(GNode *ctxt, const cha |
|
--depth; |
--depth; |
} |
} |
} |
} |
Buf_AddBytes(&buf, cp2 - cp, cp); |
Buf_AddBytesBetween(&buf, cp, cp2); |
cp = --cp2; |
cp = --cp2; |
} else |
} else |
Buf_AddByte(&buf, *cp); |
Buf_AddByte(&buf, *cp); |
Line 1937 VarQuote(char *str, Boolean quoteDollar) |
|
Line 1927 VarQuote(char *str, Boolean quoteDollar) |
|
const char *newline = Shell_GetNewline(); |
const char *newline = Shell_GetNewline(); |
if (newline == NULL) |
if (newline == NULL) |
newline = "\\\n"; |
newline = "\\\n"; |
Buf_AddBytes(&buf, strlen(newline), newline); |
Buf_AddStr(&buf, newline); |
continue; |
continue; |
} |
} |
if (isspace((unsigned char)*str) || ismeta((unsigned char)*str)) |
if (isspace((unsigned char)*str) || ismeta((unsigned char)*str)) |
Buf_AddByte(&buf, '\\'); |
Buf_AddByte(&buf, '\\'); |
Buf_AddByte(&buf, *str); |
Buf_AddByte(&buf, *str); |
if (quoteDollar && *str == '$') |
if (quoteDollar && *str == '$') |
Buf_AddBytes(&buf, 2, "\\$"); |
Buf_AddStr(&buf, "\\$"); |
} |
} |
|
|
str = Buf_Destroy(&buf, FALSE); |
str = Buf_Destroy(&buf, FALSE); |
Line 2165 ApplyModifier_Defined(const char *mod, A |
|
Line 2155 ApplyModifier_Defined(const char *mod, A |
|
void *freeIt; |
void *freeIt; |
|
|
cp2 = Var_Parse(st->cp, st->ctxt, neflags, &len, &freeIt); |
cp2 = Var_Parse(st->cp, st->ctxt, neflags, &len, &freeIt); |
Buf_AddBytes(&buf, strlen(cp2), cp2); |
Buf_AddStr(&buf, cp2); |
free(freeIt); |
free(freeIt); |
st->cp += len - 1; |
st->cp += len - 1; |
} else { |
} else { |
Line 3497 Var_Parse(const char *str, GNode *ctxt, |
|
Line 3487 Var_Parse(const char *str, GNode *ctxt, |
|
void *freeIt; |
void *freeIt; |
char *rval = Var_Parse(tstr, ctxt, flags, &rlen, &freeIt); |
char *rval = Var_Parse(tstr, ctxt, flags, &rlen, &freeIt); |
if (rval != NULL) |
if (rval != NULL) |
Buf_AddBytes(&buf, strlen(rval), rval); |
Buf_AddStr(&buf, rval); |
free(freeIt); |
free(freeIt); |
tstr += rlen - 1; |
tstr += rlen - 1; |
} else |
} else |
Line 3767 Var_Subst(const char *var, const char *s |
|
Line 3757 Var_Subst(const char *var, const char *s |
|
|
|
for (cp = str++; *str != '$' && *str != '\0'; str++) |
for (cp = str++; *str != '$' && *str != '\0'; str++) |
continue; |
continue; |
Buf_AddBytes(&buf, str - cp, cp); |
Buf_AddBytesBetween(&buf, cp, str); |
} else { |
} else { |
if (var != NULL) { |
if (var != NULL) { |
int expand; |
int expand; |
Line 3799 Var_Subst(const char *var, const char *s |
|
Line 3789 Var_Subst(const char *var, const char *s |
|
* the nested one |
* the nested one |
*/ |
*/ |
if (*p == '$') { |
if (*p == '$') { |
Buf_AddBytes(&buf, p - str, str); |
Buf_AddBytesBetween(&buf, str, p); |
str = p; |
str = p; |
continue; |
continue; |
} |
} |
Line 3812 Var_Subst(const char *var, const char *s |
|
Line 3802 Var_Subst(const char *var, const char *s |
|
*/ |
*/ |
for (; *p != '$' && *p != '\0'; p++) |
for (; *p != '$' && *p != '\0'; p++) |
continue; |
continue; |
Buf_AddBytes(&buf, p - str, str); |
Buf_AddBytesBetween(&buf, str, p); |
str = p; |
str = p; |
expand = FALSE; |
expand = FALSE; |
} else |
} else |