diff --git a/commands/global.c b/commands/global.c index fc68716..c66bf6e 100644 --- a/commands/global.c +++ b/commands/global.c @@ -78,5 +78,5 @@ BAREBOX_CMD_OPTS("[-r] VAR[=VALUE] ...") BAREBOX_CMD_GROUP(CMD_GRP_ENV) BAREBOX_CMD_HELP(cmd_global_help) - BAREBOX_CMD_COMPLETE(nv_global_complete) + BAREBOX_CMD_COMPLETE(global_complete) BAREBOX_CMD_END diff --git a/commands/nv.c b/commands/nv.c index 51b855e..01c25a1 100644 --- a/commands/nv.c +++ b/commands/nv.c @@ -104,5 +104,5 @@ BAREBOX_CMD_OPTS("[-r] VAR[=VALUE] ...") BAREBOX_CMD_GROUP(CMD_GRP_ENV) BAREBOX_CMD_HELP(cmd_nv_help) - BAREBOX_CMD_COMPLETE(nv_global_complete) + BAREBOX_CMD_COMPLETE(nv_complete) BAREBOX_CMD_END diff --git a/common/globalvar.c b/common/globalvar.c index 1db6bd9..29d158e 100644 --- a/common/globalvar.c +++ b/common/globalvar.c @@ -645,10 +645,39 @@ 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; } diff --git a/include/globalvar.h b/include/globalvar.h index df43f1f..67391e2 100644 --- a/include/globalvar.h +++ b/include/globalvar.h @@ -117,6 +117,7 @@ void nv_var_set_clean(void); int nvvar_save(void); -int nv_global_complete(struct string_list *sl, char *instr); +int nv_complete(struct string_list *sl, char *instr); +int global_complete(struct string_list *sl, char *instr); #endif /* __GLOBALVAR_H */