--- qemu-doc.texi | 3 ++- vl.c | 53 +++++++++++++++++++++++++++++++---------------------- 2 files changed, 33 insertions(+), 23 deletions(-) Index: qemu/vl.c =================================================================== --- qemu.orig/vl.c 2008-01-10 17:48:08.000000000 +0100 +++ qemu/vl.c 2008-01-10 19:06:40.000000000 +0100 @@ -4581,24 +4581,33 @@ static int net_socket_mcast_init(VLANSta } -static const char *get_word(char *buf, int buf_size, const char *p) +static const char *get_opt_name(char *buf, int buf_size, const char *p) +{ + char *q; + + q = buf; + while (*p != '\0' && *p != '=') { + if (q && (q - buf) < buf_size - 1) + *q++ = *p; + p++; + } + if (q) + *q = '\0'; + + return p; +} + +static const char *get_opt_value(char *buf, int buf_size, const char *p) { char *q; - int substring; - substring = 0; q = buf; while (*p != '\0') { - if (*p == '\\') { - p++; - if (*p == '\0') + if (*p == ',') { + if (*(p + 1) != ',') break; - } else if (*p == '\"') { - substring = !substring; p++; - continue; - } else if (!substring && (*p == ',' || *p == '=')) - break; + } if (q && (q - buf) < buf_size - 1) *q++ = *p; p++; @@ -4617,15 +4626,15 @@ static int get_param_value(char *buf, in p = str; for(;;) { - p = get_word(option, sizeof(option), p); + p = get_opt_name(option, sizeof(option), p); if (*p != '=') break; p++; if (!strcmp(tag, option)) { - (void)get_word(buf, buf_size, p); + (void)get_opt_value(buf, buf_size, p); return strlen(buf); } else { - p = get_word(NULL, 0, p); + p = get_opt_value(NULL, 0, p); } if (*p != ',') break; @@ -4642,7 +4651,7 @@ static int check_params(char *buf, int b p = str; for(;;) { - p = get_word(buf, buf_size, p); + p = get_opt_name(buf, buf_size, p); if (*p != '=') return -1; p++; @@ -4651,7 +4660,7 @@ static int check_params(char *buf, int b break; if (params[i] == NULL) return -1; - p = get_word(NULL, 0, p); + p = get_opt_value(NULL, 0, p); if (*p != ',') break; p++; @@ -4810,15 +4819,15 @@ void do_info_network(void) } } -#define HD_ALIAS "file=\"%s\",index=%d,media=disk" +#define HD_ALIAS "file=%s,index=%d,media=disk" #ifdef TARGET_PPC #define CDROM_ALIAS "index=1,media=cdrom" #else #define CDROM_ALIAS "index=2,media=cdrom" #endif #define FD_ALIAS "index=%d,if=floppy" -#define PFLASH_ALIAS "file=\"%s\",if=pflash" -#define MTD_ALIAS "file=\"%s\",if=mtd" +#define PFLASH_ALIAS "file=%s,if=pflash" +#define MTD_ALIAS "file=%s,if=mtd" #define SD_ALIAS "index=0,if=sd" static int drive_add(const char *fmt, ...) @@ -8246,7 +8255,7 @@ int main(int argc, char **argv) drive_add(MTD_ALIAS, optarg); break; case QEMU_OPTION_sd: - drive_add("file=\"%s\"," SD_ALIAS, optarg); + drive_add("file=%s," SD_ALIAS, optarg); break; case QEMU_OPTION_pflash: drive_add(PFLASH_ALIAS, optarg); @@ -8317,7 +8326,7 @@ int main(int argc, char **argv) kernel_cmdline = optarg; break; case QEMU_OPTION_cdrom: - drive_add("file=\"%s\"," CDROM_ALIAS, optarg); + drive_add("file=%s," CDROM_ALIAS, optarg); break; case QEMU_OPTION_boot: boot_devices = optarg; @@ -8352,7 +8361,7 @@ int main(int argc, char **argv) break; case QEMU_OPTION_fda: case QEMU_OPTION_fdb: - drive_add("file=\"%s\"," FD_ALIAS, optarg, + drive_add("file=%s," FD_ALIAS, optarg, popt->index - QEMU_OPTION_fda); break; #ifdef TARGET_I386 Index: qemu/qemu-doc.texi =================================================================== --- qemu.orig/qemu-doc.texi 2008-01-10 17:48:08.000000000 +0100 +++ qemu/qemu-doc.texi 2008-01-10 17:48:10.000000000 +0100 @@ -234,7 +234,8 @@ Define a new drive. Valid options are: @table @code @item address@hidden This option defines which disk image (@pxref{disk_images}) to use with -this drive. +this drive. If the filename contains comma, you must double it +(for instance, "file=my,,file" to use file "my,file"). @item address@hidden This option defines on which type on interface the drive is connected. Available types are: ide, scsi, sd, mtd, floppy, pflash.