Commit 2ecea9b8de5cd74df314541b87f712ae77f862ec

Authored by aurel32
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,
... ...