diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2016-10-10 08:31:07 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2016-10-10 08:31:07 +0200 |
commit | bfdb14c7dacf3e50a27b749259f6660ab9e930d5 (patch) | |
tree | fe81dec7194671caee4e94ac7fb68fe6e519e6df /common | |
parent | df75f19871d764c421cbce19f502ea863e5affd4 (diff) | |
parent | e4a45c096136deaf56a200054c46f474250cc89c (diff) | |
download | barebox-bfdb14c7dacf3e50a27b749259f6660ab9e930d5.tar.gz barebox-bfdb14c7dacf3e50a27b749259f6660ab9e930d5.tar.xz |
Merge branch 'for-next/misc'
Diffstat (limited to 'common')
-rw-r--r-- | common/blspec.c | 4 | ||||
-rw-r--r-- | common/complete.c | 16 | ||||
-rw-r--r-- | common/env.c | 48 | ||||
-rw-r--r-- | common/environment.c | 2 |
4 files changed, 45 insertions, 25 deletions
diff --git a/common/blspec.c b/common/blspec.c index 82b61f8741..ec63ddb407 100644 --- a/common/blspec.c +++ b/common/blspec.c @@ -306,7 +306,7 @@ static char *parse_nfs_url(const char *url) if (ip == 0) goto out; - hostpath = basprintf("%s:%s", ip_to_string(ip), path); + hostpath = basprintf("%pI4:%s", &ip, path); prevpath = nfs_find_mountpath(hostpath); @@ -348,7 +348,7 @@ out: * entry_is_of_compatible - check if a bootspec entry is compatible with * the current machine. * - * returns true is the entry is compatible, false otherwise + * returns true if the entry is compatible, false otherwise */ static bool entry_is_of_compatible(struct blspec_entry *entry) { diff --git a/common/complete.c b/common/complete.c index aee21ea183..2dab7d1dde 100644 --- a/common/complete.c +++ b/common/complete.c @@ -279,7 +279,7 @@ static int env_param_complete(struct string_list *sl, char *instr, int eval) struct env_context *c; char *instr_param; int len; - char end = '='; + char end = '=', *pos, *dot; char *begin = ""; if (!instr) @@ -290,7 +290,6 @@ static int env_param_complete(struct string_list *sl, char *instr, int eval) end = ' '; } - instr_param = strchr(instr, '.'); len = strlen(instr); c = get_current_context(); @@ -312,20 +311,21 @@ static int env_param_complete(struct string_list *sl, char *instr, int eval) c = c->parent; } - if (instr_param) { + pos = instr; + while ((dot = strchr(pos, '.'))) { char *devname; - len = (instr_param - instr); - - devname = xstrndup(instr, len); + devname = xstrndup(instr, dot - instr); instr_param++; dev = get_device_by_name(devname); free(devname); + if (dev) - device_param_complete(dev, sl, instr_param, eval); - return 0; + device_param_complete(dev, sl, dot + 1, eval); + + pos = dot + 1; } len = strlen(instr); diff --git a/common/env.c b/common/env.c index 6f736d5add..df8a4dff60 100644 --- a/common/env.c +++ b/common/env.c @@ -135,26 +135,46 @@ static const char *getenv_raw(struct list_head *l, const char *name) return NULL; } -const char *getenv (const char *name) +static const char *dev_getenv(const char *name) { - struct env_context *c; - const char *val; + const char *pos, *val, *dot, *varname; + char *devname; + struct device_d *dev; + + pos = name; + + while (1) { + dot = strchr(pos, '.'); + if (!dot) + break; + + devname = xstrndup(name, dot - name); + varname = dot + 1; + + dev = get_device_by_name(devname); + + free(devname); - if (strchr(name, '.')) { - const char *ret = NULL; - char *devstr = strdup(name); - char *par = strchr(devstr, '.'); - struct device_d *dev; - *par = 0; - dev = get_device_by_name(devstr); if (dev) { - par++; - ret = dev_get_param(dev, par); + val = dev_get_param(dev, varname); + if (val) + return val; } - free(devstr); - return ret; + + pos = dot + 1; } + return NULL; +} + +const char *getenv(const char *name) +{ + struct env_context *c; + const char *val; + + if (strchr(name, '.')) + return dev_getenv(name); + c = context; val = getenv_raw(&c->local, name); diff --git a/common/environment.c b/common/environment.c index db127d71ad..c9cef6322a 100644 --- a/common/environment.c +++ b/common/environment.c @@ -382,7 +382,7 @@ EXPORT_SYMBOL(envfs_save); static int envfs_check_super(struct envfs_super *super, size_t *size) { if (ENVFS_32(super->magic) != ENVFS_MAGIC) { - printf("envfs: wrong magic\n"); + printf("envfs: no envfs (magic mismatch) - envfs newer written?\n"); return -EIO; } |