mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-21 06:31:31 +00:00
hush: Add default value substitution support
Use standard sh syntax: ${VAR:-default} Use default value: if VAR is set and non-null, expands to $VAR. Otherwise, expands to default. ${VAR:=default} Set default value: if VAR is set and non-null, expands to $VAR. Otherwise, sets hush VAR to default and expands to default. ${VAR:+default} If VAR is set and non-null, expands to the empty string. Otherwise, expands to default. Signed-off-by: Joe Hershberger <joe.hershberger@ni.com>
This commit is contained in:
parent
923c46f97a
commit
641b0d374e
1 changed files with 40 additions and 3 deletions
|
@ -2743,13 +2743,50 @@ static int parse_group(o_string *dest, struct p_context *ctx,
|
|||
static char *lookup_param(char *src)
|
||||
{
|
||||
char *p;
|
||||
char *sep;
|
||||
char *default_val = NULL;
|
||||
int assign = 0;
|
||||
int expand_empty = 0;
|
||||
|
||||
if (!src)
|
||||
return NULL;
|
||||
|
||||
p = getenv(src);
|
||||
if (!p)
|
||||
p = get_local_var(src);
|
||||
sep = strchr(src, ':');
|
||||
|
||||
if (sep) {
|
||||
*sep = '\0';
|
||||
if (*(sep + 1) == '-')
|
||||
default_val = sep+2;
|
||||
if (*(sep + 1) == '=') {
|
||||
default_val = sep+2;
|
||||
assign = 1;
|
||||
}
|
||||
if (*(sep + 1) == '+') {
|
||||
default_val = sep+2;
|
||||
expand_empty = 1;
|
||||
}
|
||||
}
|
||||
|
||||
p = getenv(src);
|
||||
if (!p)
|
||||
p = get_local_var(src);
|
||||
|
||||
if (!p || strlen(p) == 0) {
|
||||
p = default_val;
|
||||
if (assign) {
|
||||
char *var = malloc(strlen(src)+strlen(default_val)+2);
|
||||
if (var) {
|
||||
sprintf(var, "%s=%s", src, default_val);
|
||||
set_local_var(var, 0);
|
||||
}
|
||||
free(var);
|
||||
}
|
||||
} else if (expand_empty) {
|
||||
p += strlen(p);
|
||||
}
|
||||
|
||||
if (sep)
|
||||
*sep = ':';
|
||||
|
||||
return p;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue