Commit 83ab7950d23f037a665d17806fc903ca3565510c
1 parent
f99ed40a
Revert r4979 since it breaks the monitor
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5028 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
3 changed files
with
20 additions
and
16 deletions
console.h
| ... | ... | @@ -160,7 +160,6 @@ extern uint8_t _translate_keycode(const int key); |
| 160 | 160 | does not need to include console.h */ |
| 161 | 161 | /* monitor.c */ |
| 162 | 162 | void monitor_init(CharDriverState *hd, int show_banner); |
| 163 | -void monitor_start_input(void); | |
| 164 | 163 | void term_puts(const char *str); |
| 165 | 164 | void term_vprintf(const char *fmt, va_list ap); |
| 166 | 165 | void term_printf(const char *fmt, ...) __attribute__ ((__format__ (__printf__, 1, 2))); | ... | ... |
monitor.c
| ... | ... | @@ -76,6 +76,8 @@ static term_cmd_t info_cmds[]; |
| 76 | 76 | static uint8_t term_outbuf[1024]; |
| 77 | 77 | static int term_outbuf_index; |
| 78 | 78 | |
| 79 | +static void monitor_start_input(void); | |
| 80 | + | |
| 79 | 81 | CPUState *mon_cpu = NULL; |
| 80 | 82 | |
| 81 | 83 | void term_flush(void) |
| ... | ... | @@ -2683,13 +2685,15 @@ static void term_read(void *opaque, const uint8_t *buf, int size) |
| 2683 | 2685 | readline_handle_byte(buf[i]); |
| 2684 | 2686 | } |
| 2685 | 2687 | |
| 2688 | +static void monitor_start_input(void); | |
| 2689 | + | |
| 2686 | 2690 | static void monitor_handle_command1(void *opaque, const char *cmdline) |
| 2687 | 2691 | { |
| 2688 | 2692 | monitor_handle_command(cmdline); |
| 2689 | 2693 | monitor_start_input(); |
| 2690 | 2694 | } |
| 2691 | 2695 | |
| 2692 | -void monitor_start_input(void) | |
| 2696 | +static void monitor_start_input(void) | |
| 2693 | 2697 | { |
| 2694 | 2698 | readline_start("(qemu) ", 0, monitor_handle_command1, NULL); |
| 2695 | 2699 | } |
| ... | ... | @@ -2730,6 +2734,8 @@ void monitor_init(CharDriverState *hd, int show_banner) |
| 2730 | 2734 | hide_banner = !show_banner; |
| 2731 | 2735 | |
| 2732 | 2736 | qemu_chr_add_handlers(hd, term_can_read, term_read, term_event, NULL); |
| 2737 | + | |
| 2738 | + readline_start("", 0, monitor_handle_command1, NULL); | |
| 2733 | 2739 | } |
| 2734 | 2740 | |
| 2735 | 2741 | /* XXX: use threads ? */ | ... | ... |
vl.c
| ... | ... | @@ -5721,7 +5721,7 @@ static int drive_init(struct drive_opt *arg, int snapshot, |
| 5721 | 5721 | bdrv_flags |= BDRV_O_SNAPSHOT; |
| 5722 | 5722 | if (!cache) |
| 5723 | 5723 | bdrv_flags |= BDRV_O_DIRECT; |
| 5724 | - if (bdrv_open2(bdrv, file, bdrv_flags, drv) < 0) { | |
| 5724 | + if (bdrv_open2(bdrv, file, bdrv_flags, drv) < 0 || qemu_key_check(bdrv, file)) { | |
| 5725 | 5725 | fprintf(stderr, "qemu: could not open disk image %s\n", |
| 5726 | 5726 | file); |
| 5727 | 5727 | return -1; |
| ... | ... | @@ -8009,14 +8009,22 @@ int qemu_key_check(BlockDriverState *bs, const char *name) |
| 8009 | 8009 | return -EPERM; |
| 8010 | 8010 | } |
| 8011 | 8011 | |
| 8012 | +static BlockDriverState *get_bdrv(int index) | |
| 8013 | +{ | |
| 8014 | + if (index > nb_drives) | |
| 8015 | + return NULL; | |
| 8016 | + return drives_table[index].bdrv; | |
| 8017 | +} | |
| 8018 | + | |
| 8012 | 8019 | static void read_passwords(void) |
| 8013 | 8020 | { |
| 8014 | 8021 | BlockDriverState *bs; |
| 8015 | 8022 | int i; |
| 8016 | 8023 | |
| 8017 | - for(i = 0; i < nb_drives; i++) { | |
| 8018 | - bs = drives_table[i].bdrv; | |
| 8019 | - qemu_key_check(bs, bdrv_get_device_name(bs)); | |
| 8024 | + for(i = 0; i < 6; i++) { | |
| 8025 | + bs = get_bdrv(i); | |
| 8026 | + if (bs) | |
| 8027 | + qemu_key_check(bs, bdrv_get_device_name(bs)); | |
| 8020 | 8028 | } |
| 8021 | 8029 | } |
| 8022 | 8030 | |
| ... | ... | @@ -8185,7 +8193,6 @@ int main(int argc, char **argv) |
| 8185 | 8193 | int optind; |
| 8186 | 8194 | const char *r, *optarg; |
| 8187 | 8195 | CharDriverState *monitor_hd; |
| 8188 | - int has_monitor; | |
| 8189 | 8196 | const char *monitor_device; |
| 8190 | 8197 | const char *serial_devices[MAX_SERIAL_PORTS]; |
| 8191 | 8198 | int serial_device_index; |
| ... | ... | @@ -9055,8 +9062,6 @@ int main(int argc, char **argv) |
| 9055 | 9062 | } |
| 9056 | 9063 | |
| 9057 | 9064 | /* Maintain compatibility with multiple stdio monitors */ |
| 9058 | - | |
| 9059 | - has_monitor = 0; | |
| 9060 | 9065 | if (!strcmp(monitor_device,"stdio")) { |
| 9061 | 9066 | for (i = 0; i < MAX_SERIAL_PORTS; i++) { |
| 9062 | 9067 | const char *devname = serial_devices[i]; |
| ... | ... | @@ -9069,7 +9074,6 @@ int main(int argc, char **argv) |
| 9069 | 9074 | break; |
| 9070 | 9075 | } |
| 9071 | 9076 | } |
| 9072 | - has_monitor = 1; | |
| 9073 | 9077 | } |
| 9074 | 9078 | if (monitor_device) { |
| 9075 | 9079 | monitor_hd = qemu_chr_open(monitor_device); |
| ... | ... | @@ -9078,7 +9082,6 @@ int main(int argc, char **argv) |
| 9078 | 9082 | exit(1); |
| 9079 | 9083 | } |
| 9080 | 9084 | monitor_init(monitor_hd, !nographic); |
| 9081 | - has_monitor = 1; | |
| 9082 | 9085 | } |
| 9083 | 9086 | |
| 9084 | 9087 | for(i = 0; i < MAX_SERIAL_PORTS; i++) { |
| ... | ... | @@ -9139,16 +9142,12 @@ int main(int argc, char **argv) |
| 9139 | 9142 | } |
| 9140 | 9143 | #endif |
| 9141 | 9144 | |
| 9142 | - read_passwords(); | |
| 9143 | - | |
| 9144 | - if (has_monitor) | |
| 9145 | - monitor_start_input(); | |
| 9146 | - | |
| 9147 | 9145 | if (loadvm) |
| 9148 | 9146 | do_loadvm(loadvm); |
| 9149 | 9147 | |
| 9150 | 9148 | { |
| 9151 | 9149 | /* XXX: simplify init */ |
| 9150 | + read_passwords(); | |
| 9152 | 9151 | if (autostart) { |
| 9153 | 9152 | vm_start(); |
| 9154 | 9153 | } | ... | ... |