Benoît Canet <benoit.ca...@irqsave.net> writes: > The Wednesday 10 Sep 2014 à 10:13:36 (+0200), Markus Armbruster wrote : [...] >> --- a/monitor.c >> +++ b/monitor.c >> @@ -4208,24 +4208,6 @@ static void file_completion(Monitor *mon, const char >> *input) >> closedir(ffs); >> } >> >> -typedef struct MonitorBlockComplete { >> - Monitor *mon; >> - const char *input; >> -} MonitorBlockComplete; >> - >> -static void block_completion_it(void *opaque, BlockDriverState *bs) >> -{ >> - const char *name = bdrv_get_device_name(bs); >> - MonitorBlockComplete *mbc = opaque; >> - Monitor *mon = mbc->mon; >> - const char *input = mbc->input; >> - >> - if (input[0] == '\0' || >> - !strncmp(name, (char *)input, strlen(input))) { >> - readline_add_completion(mon->rs, name); >> - } >> -} >> - >> static const char *next_arg_type(const char *typestr) >> { >> const char *p = strchr(typestr, ':'); >> @@ -4663,9 +4645,9 @@ static void monitor_find_completion_by_table(Monitor >> *mon, >> { >> const char *cmdname; >> int i; >> - const char *ptype, *str; >> + const char *ptype, *str, *name; >> const mon_cmd_t *cmd; >> - MonitorBlockComplete mbs; >> + BlockDriverState *bs; >> >> if (nb_args <= 1) { >> /* command completion */ >> @@ -4717,10 +4699,13 @@ static void monitor_find_completion_by_table(Monitor >> *mon, >> break; >> case 'B': >> /* block device name completion */ >> - mbs.mon = mon; >> - mbs.input = str; > >> - readline_set_completion_index(mon->rs, strlen(str)); > > Why is this line removed ?
Accident! Fixing... > In monitor readline_set_completion_index seems to work in pair with > readline_add_completion. > Either this line should be removed and readline_add_completion too or > the oposite. > >> - bdrv_iterate(block_completion_it, &mbs); >> + for (bs = bdrv_next(NULL); bs; bs = bdrv_next(bs)) { >> + name = bdrv_get_device_name(bs); >> + if (str[0] == '\0' || >> + !strncmp(name, str, strlen(str))) { >> + readline_add_completion(mon->rs, name); >> + } >> + } >> break; >> case 's': >> case 'S': >> -- >> 1.9.3 >> >>