Revision 599a926a

b/monitor.c
4091 4091
    closedir(ffs);
4092 4092
}
4093 4093

  
4094
typedef struct MonitorBlockComplete {
4095
    Monitor *mon;
4096
    const char *input;
4097
} MonitorBlockComplete;
4098

  
4094 4099
static void block_completion_it(void *opaque, BlockDriverState *bs)
4095 4100
{
4096 4101
    const char *name = bdrv_get_device_name(bs);
4097
    const char *input = opaque;
4102
    MonitorBlockComplete *mbc = opaque;
4103
    Monitor *mon = mbc->mon;
4104
    const char *input = mbc->input;
4098 4105

  
4099 4106
    if (input[0] == '\0' ||
4100 4107
        !strncmp(name, (char *)input, strlen(input))) {
4101
        readline_add_completion(cur_mon->rs, name);
4108
        readline_add_completion(mon->rs, name);
4102 4109
    }
4103 4110
}
4104 4111

  
......
4142 4149
    const char *ptype, *str;
4143 4150
    const mon_cmd_t *cmd;
4144 4151
    Monitor *mon = cur_mon;
4152
    MonitorBlockComplete mbs;
4145 4153

  
4146 4154
    parse_cmdline(cmdline, &nb_args, args);
4147 4155
#ifdef DEBUG_COMPLETION
......
4200 4208
            break;
4201 4209
        case 'B':
4202 4210
            /* block device name completion */
4203
            readline_set_completion_index(cur_mon->rs, strlen(str));
4204
            bdrv_iterate(block_completion_it, (void *)str);
4211
            mbs.mon = mon;
4212
            mbs.input = str;
4213
            readline_set_completion_index(mon->rs, strlen(str));
4214
            bdrv_iterate(block_completion_it, &mbs);
4205 4215
            break;
4206 4216
        case 's':
4207 4217
            /* XXX: more generic ? */

Also available in: Unified diff