Revision 2292ddae

b/blockdev.c
75 75
    }
76 76
}
77 77

  
78
QemuOpts *drive_add(const char *file, const char *fmt, ...)
78
QemuOpts *drive_def(const char *optstr)
79
{
80
    return qemu_opts_parse(qemu_find_opts("drive"), optstr, 0);
81
}
82

  
83
QemuOpts *drive_add(BlockInterfaceType type, int index, const char *file,
84
                    const char *fmt, ...)
79 85
{
80 86
    va_list ap;
81 87
    char optstr[1024];
82 88
    QemuOpts *opts;
89
    char buf[32];
83 90

  
84 91
    va_start(ap, fmt);
85 92
    vsnprintf(optstr, sizeof(optstr), fmt, ap);
86 93
    va_end(ap);
87 94

  
88
    opts = qemu_opts_parse(qemu_find_opts("drive"), optstr, 0);
95
    opts = drive_def(optstr);
89 96
    if (!opts) {
90 97
        return NULL;
91 98
    }
99
    if (type != IF_DEFAULT) {
100
        qemu_opt_set(opts, "if", if_name[type]);
101
    }
102
    if (index >= 0) {
103
        snprintf(buf, sizeof(buf), "%d", index);
104
        qemu_opt_set(opts, "index", buf);
105
    }
92 106
    if (file)
93 107
        qemu_opt_set(opts, "file", file);
94 108
    return opts;
......
473 487
        if (devaddr)
474 488
            qemu_opt_set(opts, "addr", devaddr);
475 489
        break;
476
    case IF_COUNT:
490
    default:
477 491
        abort();
478 492
    }
479 493
    if (!file || !*file) {
b/blockdev.h
19 19
#define BLOCK_SERIAL_STRLEN 20
20 20

  
21 21
typedef enum {
22
    IF_DEFAULT = -1,            /* for use with drive_add() only */
22 23
    IF_NONE,
23 24
    IF_IDE, IF_SCSI, IF_FLOPPY, IF_PFLASH, IF_MTD, IF_SD, IF_VIRTIO, IF_XEN,
24 25
    IF_COUNT
......
43 44
void drive_uninit(DriveInfo *dinfo);
44 45
DriveInfo *drive_get_by_blockdev(BlockDriverState *bs);
45 46

  
46
QemuOpts *drive_add(const char *file, const char *fmt, ...) GCC_FMT_ATTR(2, 3);
47
QemuOpts *drive_def(const char *optstr);
48
QemuOpts *drive_add(BlockInterfaceType type, int index, const char *file,
49
                    const char *fmt, ...) /*GCC_FMT_ATTR(4, 5)*/;
50
    /* GCC_FMT_ATTR() commented out to avoid the (pretty useless)
51
     * "zero-length gnu_printf format string" warning we insist to
52
     * enable */
47 53
DriveInfo *drive_init(QemuOpts *arg, int default_to_scsi, int *fatal_error);
48 54

  
49 55
/* device-hotplug */
b/hw/device-hotplug.c
33 33
    DriveInfo *dinfo;
34 34
    QemuOpts *opts;
35 35

  
36
    opts = drive_add(NULL, "%s", optstr);
36
    opts = drive_def(optstr);
37 37
    if (!opts)
38 38
        return NULL;
39 39

  
b/vl.c
621 621
/***********************************************************/
622 622
/* QEMU Block devices */
623 623

  
624
#define HD_ALIAS "index=%d,media=disk"
625
#define CDROM_ALIAS "index=2,media=cdrom"
626
#define FD_ALIAS "index=%d,if=floppy"
627
#define PFLASH_ALIAS "if=pflash"
628
#define MTD_ALIAS "if=mtd"
629
#define SD_ALIAS "index=0,if=sd"
624
/* Any % in the following strings must be escaped as %% */
625
#define HD_OPTS "media=disk"
626
#define CDROM_OPTS "media=cdrom"
627
#define FD_OPTS ""
628
#define PFLASH_OPTS ""
629
#define MTD_OPTS ""
630
#define SD_OPTS ""
630 631

  
631 632
static int drive_init_func(QemuOpts *opts, void *opaque)
632 633
{
......
1987 1988
        if (optind >= argc)
1988 1989
            break;
1989 1990
        if (argv[optind][0] != '-') {
1990
	    hda_opts = drive_add(argv[optind++], HD_ALIAS, 0);
1991
	    hda_opts = drive_add(IF_DEFAULT, 0, argv[optind++], HD_OPTS);
1991 1992
        } else {
1992 1993
            const QEMUOption *popt;
1993 1994

  
......
2027 2028
                break;
2028 2029
            case QEMU_OPTION_hda:
2029 2030
                if (cyls == 0)
2030
                    hda_opts = drive_add(optarg, HD_ALIAS, 0);
2031
                    hda_opts = drive_add(IF_DEFAULT, 0, optarg, HD_OPTS);
2031 2032
                else
2032
                    hda_opts = drive_add(optarg, HD_ALIAS
2033
                    hda_opts = drive_add(IF_DEFAULT, 0, optarg, HD_OPTS
2033 2034
			     ",cyls=%d,heads=%d,secs=%d%s",
2034
                             0, cyls, heads, secs,
2035
                             cyls, heads, secs,
2035 2036
                             translation == BIOS_ATA_TRANSLATION_LBA ?
2036 2037
                                 ",trans=lba" :
2037 2038
                             translation == BIOS_ATA_TRANSLATION_NONE ?
......
2040 2041
            case QEMU_OPTION_hdb:
2041 2042
            case QEMU_OPTION_hdc:
2042 2043
            case QEMU_OPTION_hdd:
2043
                drive_add(optarg, HD_ALIAS, popt->index - QEMU_OPTION_hda);
2044
                drive_add(IF_DEFAULT, popt->index - QEMU_OPTION_hda, optarg,
2045
                          HD_OPTS);
2044 2046
                break;
2045 2047
            case QEMU_OPTION_drive:
2046
                drive_add(NULL, "%s", optarg);
2048
                drive_def(optarg);
2047 2049
	        break;
2048 2050
            case QEMU_OPTION_set:
2049 2051
                if (qemu_set_option(optarg) != 0)
......
2054 2056
                    exit(1);
2055 2057
	        break;
2056 2058
            case QEMU_OPTION_mtdblock:
2057
                drive_add(optarg, MTD_ALIAS);
2059
                drive_add(IF_MTD, -1, optarg, MTD_OPTS);
2058 2060
                break;
2059 2061
            case QEMU_OPTION_sd:
2060
                drive_add(optarg, SD_ALIAS);
2062
                drive_add(IF_SD, 0, optarg, SD_OPTS);
2061 2063
                break;
2062 2064
            case QEMU_OPTION_pflash:
2063
                drive_add(optarg, PFLASH_ALIAS);
2065
                drive_add(IF_PFLASH, -1, optarg, PFLASH_OPTS);
2064 2066
                break;
2065 2067
            case QEMU_OPTION_snapshot:
2066 2068
                snapshot = 1;
......
2139 2141
                kernel_cmdline = optarg;
2140 2142
                break;
2141 2143
            case QEMU_OPTION_cdrom:
2142
                drive_add(optarg, CDROM_ALIAS);
2144
                drive_add(IF_DEFAULT, 2, optarg, CDROM_OPTS);
2143 2145
                break;
2144 2146
            case QEMU_OPTION_boot:
2145 2147
                {
......
2192 2194
                break;
2193 2195
            case QEMU_OPTION_fda:
2194 2196
            case QEMU_OPTION_fdb:
2195
                drive_add(optarg, FD_ALIAS, popt->index - QEMU_OPTION_fda);
2197
                drive_add(IF_FLOPPY, popt->index - QEMU_OPTION_fda,
2198
                          optarg, FD_OPTS);
2196 2199
                break;
2197 2200
            case QEMU_OPTION_no_fd_bootchk:
2198 2201
                fd_bootchk = 0;
......
2892 2895

  
2893 2896
    if (default_cdrom) {
2894 2897
        /* we always create the cdrom drive, even if no disk is there */
2895
        drive_add(NULL, CDROM_ALIAS);
2898
        drive_add(IF_DEFAULT, 2, NULL, CDROM_OPTS);
2896 2899
    }
2897 2900

  
2898 2901
    if (default_floppy) {
2899 2902
        /* we always create at least one floppy */
2900
        drive_add(NULL, FD_ALIAS, 0);
2903
        drive_add(IF_FLOPPY, 0, NULL, FD_OPTS);
2901 2904
    }
2902 2905

  
2903 2906
    if (default_sdcard) {
2904 2907
        /* we always create one sd slot, even if no card is in it */
2905
        drive_add(NULL, SD_ALIAS);
2908
        drive_add(IF_SD, 0, NULL, SD_OPTS);
2906 2909
    }
2907 2910

  
2908 2911
    /* open the virtual block devices */

Also available in: Unified diff