Revision 334c0241 hw/usb-msd.c

b/hw/usb-msd.c
517 517
{
518 518
    MSDState *s;
519 519
    BlockDriverState *bdrv;
520
    BlockDriver *drv = NULL;
521
    const char *p1;
522
    char fmt[32];
523

  
524
    p1 = strchr(filename, ':');
525
    if (p1++) {
526
        const char *p2;
527

  
528
        if (strstart(filename, "format=", &p2)) {
529
            int len = MIN(p1 - p2, sizeof(fmt));
530
            pstrcpy(fmt, len, p2);
531

  
532
            drv = bdrv_find_format(fmt);
533
            if (!drv) {
534
                printf("invalid format %s\n", fmt);
535
                return NULL;
536
            }
537
        } else if (*filename != ':') {
538
            printf("unrecognized USB mass-storage option %s\n", filename);
539
            return NULL;
540
        }
541

  
542
        filename = p1;
543
    }
544

  
545
    if (!*filename) {
546
        printf("block device specification needed\n");
547
        return NULL;
548
    }
520 549

  
521 550
    s = qemu_mallocz(sizeof(MSDState));
522 551
    if (!s)
523 552
        return NULL;
524 553

  
525 554
    bdrv = bdrv_new("usb");
526
    if (bdrv_open(bdrv, filename, 0) < 0)
555
    if (bdrv_open2(bdrv, filename, 0, drv) < 0)
527 556
        goto fail;
528 557
    if (qemu_key_check(bdrv, filename))
529 558
        goto fail;

Also available in: Unified diff