Benoît Canet <[email protected]> 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
>>
>>