Commit 2ecea9b8de5cd74df314541b87f712ae77f862ec
1 parent
94451178
Add image format option in monitor for removable media
(Chris Wright) CVE-2008-1945 git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4747 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
14 additions
and
6 deletions
monitor.c
... | ... | @@ -396,18 +396,26 @@ static void do_eject(int force, const char *filename) |
396 | 396 | eject_device(bs, force); |
397 | 397 | } |
398 | 398 | |
399 | -static void do_change_block(const char *device, const char *filename) | |
399 | +static void do_change_block(const char *device, const char *filename, const char *fmt) | |
400 | 400 | { |
401 | 401 | BlockDriverState *bs; |
402 | + BlockDriver *drv = NULL; | |
402 | 403 | |
403 | 404 | bs = bdrv_find(device); |
404 | 405 | if (!bs) { |
405 | 406 | term_printf("device not found\n"); |
406 | 407 | return; |
407 | 408 | } |
409 | + if (fmt) { | |
410 | + drv = bdrv_find_format(fmt); | |
411 | + if (!drv) { | |
412 | + term_printf("invalid format %s\n", fmt); | |
413 | + return; | |
414 | + } | |
415 | + } | |
408 | 416 | if (eject_device(bs, 0) < 0) |
409 | 417 | return; |
410 | - bdrv_open(bs, filename, 0); | |
418 | + bdrv_open2(bs, filename, 0, drv); | |
411 | 419 | qemu_key_check(bs, filename); |
412 | 420 | } |
413 | 421 | |
... | ... | @@ -426,12 +434,12 @@ static void do_change_vnc(const char *target) |
426 | 434 | } |
427 | 435 | } |
428 | 436 | |
429 | -static void do_change(const char *device, const char *target) | |
437 | +static void do_change(const char *device, const char *target, const char *fmt) | |
430 | 438 | { |
431 | 439 | if (strcmp(device, "vnc") == 0) { |
432 | 440 | do_change_vnc(target); |
433 | 441 | } else { |
434 | - do_change_block(device, target); | |
442 | + do_change_block(device, target, fmt); | |
435 | 443 | } |
436 | 444 | } |
437 | 445 | |
... | ... | @@ -1339,8 +1347,8 @@ static term_cmd_t term_cmds[] = { |
1339 | 1347 | "", "quit the emulator" }, |
1340 | 1348 | { "eject", "-fB", do_eject, |
1341 | 1349 | "[-f] device", "eject a removable medium (use -f to force it)" }, |
1342 | - { "change", "BF", do_change, | |
1343 | - "device filename", "change a removable medium" }, | |
1350 | + { "change", "BFs?", do_change, | |
1351 | + "device filename [format]", "change a removable medium, optional format" }, | |
1344 | 1352 | { "screendump", "F", do_screen_dump, |
1345 | 1353 | "filename", "save screen into PPM image 'filename'" }, |
1346 | 1354 | { "logfile", "F", do_logfile, | ... | ... |