version 1.2, 2004/04/07 13:11:36 |
version 1.3, 2007/07/08 17:44:20 |
|
|
|
|
static const char *find_op1(const char *); |
static const char *find_op1(const char *); |
static const char *find_op2(const char *); |
static const char *find_op2(const char *); |
|
static bool parse_variable_assignment(const char *, int); |
|
|
static const char * |
static const char * |
find_op1(const char *p) |
find_op1(const char *p) |
|
|
return p; |
return p; |
} |
} |
|
|
bool |
static bool |
Parse_DoVar(const char *line, |
parse_variable_assignment(const char *line, |
GSymT *ctxt) /* Context in which to do the assignment */ |
int ctxt) /* Context in which to do the assignment */ |
{ |
{ |
const char *arg; |
const char *arg; |
char *res1 = NULL, *res2 = NULL; |
char *res1 = NULL, *res2 = NULL; |
|
|
int type; /* Type of assignment */ |
int type; /* Type of assignment */ |
struct Name name; |
struct Name name; |
|
|
arg = VarName_Get(line, &name, (SymTable *)ctxt, true, |
arg = VarName_Get(line, &name, NULL, true, |
FEATURES(FEATURE_SUNSHCMD) ? find_op1 : find_op2); |
FEATURES(FEATURE_SUNSHCMD) ? find_op1 : find_op2); |
|
|
while (isspace(*arg)) |
while (isspace(*arg)) |
|
|
while (isspace(*arg)) |
while (isspace(*arg)) |
arg++; |
arg++; |
/* If the variable already has a value, we don't do anything. */ |
/* If the variable already has a value, we don't do anything. */ |
if ((type & VAR_OPT) && Var_Valuei(name.s, name.e) != NULL) { |
if ((type & VAR_OPT) && Var_Definedi(name.s, name.e)) { |
VarName_Free(&name); |
VarName_Free(&name); |
return true; |
return true; |
} |
} |
|
|
if (Var_Valuei(name.s, name.e) == NULL) |
if (Var_Valuei(name.s, name.e) == NULL) |
Var_Seti(name.s, name.e, "", ctxt); |
Var_Seti(name.s, name.e, "", ctxt); |
|
|
res2 = Var_Subst(arg, (SymTable *)ctxt, false); |
res2 = Var_Subst(arg, NULL, false); |
oldVars = oldOldVars; |
oldVars = oldOldVars; |
|
|
arg = res2; |
arg = res2; |
|
|
free(res2); |
free(res2); |
free(res1); |
free(res1); |
return true; |
return true; |
|
} |
|
|
|
bool |
|
Parse_DoVar(const char *line) |
|
{ |
|
return parse_variable_assignment(line, VAR_GLOBAL); |
|
} |
|
|
|
bool |
|
Parse_CmdlineVar(const char *line) |
|
{ |
|
bool result; |
|
|
|
oldVars = false; |
|
result = parse_variable_assignment(line, VAR_CMD); |
|
oldVars = true; |
|
return result; |
} |
} |
|
|