diff --git a/console.h b/console.h index e852dd11e3..561ef51bca 100644 --- a/console.h +++ b/console.h @@ -160,7 +160,6 @@ extern uint8_t _translate_keycode(const int key); does not need to include console.h */ /* monitor.c */ void monitor_init(CharDriverState *hd, int show_banner); -void monitor_start_input(void); void term_puts(const char *str); void term_vprintf(const char *fmt, va_list ap); void term_printf(const char *fmt, ...) __attribute__ ((__format__ (__printf__, 1, 2))); diff --git a/monitor.c b/monitor.c index 0a3027cc77..47c5514745 100644 --- a/monitor.c +++ b/monitor.c @@ -76,6 +76,8 @@ static term_cmd_t info_cmds[]; static uint8_t term_outbuf[1024]; static int term_outbuf_index; +static void monitor_start_input(void); + CPUState *mon_cpu = NULL; void term_flush(void) @@ -2683,13 +2685,15 @@ static void term_read(void *opaque, const uint8_t *buf, int size) readline_handle_byte(buf[i]); } +static void monitor_start_input(void); + static void monitor_handle_command1(void *opaque, const char *cmdline) { monitor_handle_command(cmdline); monitor_start_input(); } -void monitor_start_input(void) +static void monitor_start_input(void) { readline_start("(qemu) ", 0, monitor_handle_command1, NULL); } @@ -2730,6 +2734,8 @@ void monitor_init(CharDriverState *hd, int show_banner) hide_banner = !show_banner; qemu_chr_add_handlers(hd, term_can_read, term_read, term_event, NULL); + + readline_start("", 0, monitor_handle_command1, NULL); } /* XXX: use threads ? */ diff --git a/vl.c b/vl.c index 281d067bc6..ff9aed97e0 100644 --- a/vl.c +++ b/vl.c @@ -5721,7 +5721,7 @@ static int drive_init(struct drive_opt *arg, int snapshot, bdrv_flags |= BDRV_O_SNAPSHOT; if (!cache) bdrv_flags |= BDRV_O_DIRECT; - if (bdrv_open2(bdrv, file, bdrv_flags, drv) < 0) { + if (bdrv_open2(bdrv, file, bdrv_flags, drv) < 0 || qemu_key_check(bdrv, file)) { fprintf(stderr, "qemu: could not open disk image %s\n", file); return -1; @@ -8009,14 +8009,22 @@ int qemu_key_check(BlockDriverState *bs, const char *name) return -EPERM; } +static BlockDriverState *get_bdrv(int index) +{ + if (index > nb_drives) + return NULL; + return drives_table[index].bdrv; +} + static void read_passwords(void) { BlockDriverState *bs; int i; - for(i = 0; i < nb_drives; i++) { - bs = drives_table[i].bdrv; - qemu_key_check(bs, bdrv_get_device_name(bs)); + for(i = 0; i < 6; i++) { + bs = get_bdrv(i); + if (bs) + qemu_key_check(bs, bdrv_get_device_name(bs)); } } @@ -8185,7 +8193,6 @@ int main(int argc, char **argv) int optind; const char *r, *optarg; CharDriverState *monitor_hd; - int has_monitor; const char *monitor_device; const char *serial_devices[MAX_SERIAL_PORTS]; int serial_device_index; @@ -9055,8 +9062,6 @@ int main(int argc, char **argv) } /* Maintain compatibility with multiple stdio monitors */ - - has_monitor = 0; if (!strcmp(monitor_device,"stdio")) { for (i = 0; i < MAX_SERIAL_PORTS; i++) { const char *devname = serial_devices[i]; @@ -9069,7 +9074,6 @@ int main(int argc, char **argv) break; } } - has_monitor = 1; } if (monitor_device) { monitor_hd = qemu_chr_open(monitor_device); @@ -9078,7 +9082,6 @@ int main(int argc, char **argv) exit(1); } monitor_init(monitor_hd, !nographic); - has_monitor = 1; } for(i = 0; i < MAX_SERIAL_PORTS; i++) { @@ -9139,16 +9142,12 @@ int main(int argc, char **argv) } #endif - read_passwords(); - - if (has_monitor) - monitor_start_input(); - if (loadvm) do_loadvm(loadvm); { /* XXX: simplify init */ + read_passwords(); if (autostart) { vm_start(); }