diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2017-11-23 11:59:46 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2017-11-23 12:04:49 +0100 |
commit | 834527a5f9bfa378647f1602a41742a01b5a1b18 (patch) | |
tree | 8000c11db72f0f9c1e7b92e854be01bc292af16b /common/globalvar.c | |
parent | 1c2c4246a9914bfdf234c6c636abcd27d9d3975c (diff) | |
download | barebox-834527a5f9bfa378647f1602a41742a01b5a1b18.tar.gz barebox-834527a5f9bfa378647f1602a41742a01b5a1b18.tar.xz |
nv: add device parameter overwrites to completion list
nv variables in the form dev.<devname>.* can be used to make device
parameters persistent. Add these to the completion list to make setting
these variables more convenient.
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'common/globalvar.c')
-rw-r--r-- | common/globalvar.c | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/common/globalvar.c b/common/globalvar.c index 1db6bd9a41..29d158e3fb 100644 --- a/common/globalvar.c +++ b/common/globalvar.c @@ -645,10 +645,39 @@ static int nv_global_param_complete(struct device_d *dev, struct string_list *sl return 0; } -int nv_global_complete(struct string_list *sl, char *instr) +int nv_complete(struct string_list *sl, char *instr) +{ + struct device_d *dev; + struct param_d *param; + char *str; + int len; + + nv_global_param_complete(&global_device, sl, instr, 0); + + len = strlen(instr); + + if (strncmp(instr, "dev.", min_t(int, len, 4))) + return 0; + + for_each_device(dev) { + if (dev == &global_device || dev == &nv_device) + continue; + + list_for_each_entry(param, &dev->parameters, list) { + str = basprintf("dev.%s.%s=", dev_name(dev), param->name); + if (strncmp(instr, str, len)) + free(str); + else + string_list_add(sl, str); + } + } + + return 0; +} + +int global_complete(struct string_list *sl, char *instr) { nv_global_param_complete(&global_device, sl, instr, 0); - nv_global_param_complete(&nv_device, sl, instr, 0); return 0; } |