[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] Fix double backslash problem in Windows
From: |
Laurent Vivier |
Subject: |
Re: [Qemu-devel] [PATCH] Fix double backslash problem in Windows |
Date: |
Thu, 10 Jan 2008 10:35:35 +0100 |
Le mercredi 09 janvier 2008 à 13:27 +0000, Johannes Schindelin a écrit :
[...]
> Besides, it would not be _that_ complicated:
This patch doesn't manage the case where we have comma in filename:
qemu -drive file=my,file,if=scsi
where filename is "my,file".
Laurent
> -- snipsnap --
> [PATCH] make special escaping for -hda parameters unnecessary
>
> Signed-off-by: Johannes Schindelin <address@hidden>
>
> ---
>
> vl.c | 64 ++++++++++++++++++++++++++++++++++++----------------------------
> 1 files changed, 36 insertions(+), 28 deletions(-)
>
> diff --git a/vl.c b/vl.c
> index 8e346fe..c9966d1 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -231,7 +231,10 @@ unsigned int nb_prom_envs = 0;
> const char *prom_envs[MAX_PROM_ENVS];
> #endif
> int nb_drives_opt;
> -char drives_opt[MAX_DRIVES][1024];
> +struct drive_opt {
> + const char *file;
> + char opt[1024];
> +} drives_opt[MAX_DRIVES];
>
> static CPUState *cur_cpu;
> static CPUState *next_cpu;
> @@ -4859,18 +4862,18 @@ void do_info_network(void)
> }
> }
>
> -#define HD_ALIAS "file=\"%s\",index=%d,media=disk"
> +#define HD_ALIAS "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 "if=pflash"
> +#define MTD_ALIAS "if=mtd"
> #define SD_ALIAS "index=0,if=sd"
>
> -static int drive_add(const char *fmt, ...)
> +static int drive_add(const char *file, const char *fmt, ...)
> {
> va_list ap;
>
> @@ -4879,8 +4882,9 @@ static int drive_add(const char *fmt, ...)
> exit(1);
> }
>
> + drives_opt[nb_drives_opt].file = file;
> va_start(ap, fmt);
> - vsnprintf(drives_opt[nb_drives_opt], sizeof(drives_opt[0]), fmt, ap);
> + vsnprintf(drives_opt[nb_drives_opt].opt, sizeof(drives_opt[0]), fmt, ap);
> va_end(ap);
>
> return nb_drives_opt++;
> @@ -4915,12 +4919,13 @@ int drive_get_max_bus(BlockInterfaceType type)
> return max_bus;
> }
>
> -static int drive_init(const char *str, int snapshot, QEMUMachine *machine)
> +static int drive_init(struct drive_opt *o, int snapshot, QEMUMachine
> *machine)
> {
> char buf[128];
> char file[1024];
> char devname[128];
> const char *mediastr = "";
> + const char *str = o->opt;
> BlockInterfaceType type;
> enum { MEDIA_DISK, MEDIA_CDROM } media;
> int bus_id, unit_id;
> @@ -4940,7 +4945,11 @@ static int drive_init(const char *str, int snapshot,
> QEMUMachine *machine)
> return -1;
> }
>
> - file[0] = 0;
> + if (o->file) {
> + strncpy(file, o->file, sizeof(file) - 1);
> + file[sizeof(file) - 1] = 0;
> + } else
> + file[0] = 0;
> cyls = heads = secs = 0;
> bus_id = 0;
> unit_id = -1;
> @@ -8212,7 +8221,7 @@ int main(int argc, char **argv)
> break;
> r = argv[optind];
> if (r[0] != '-') {
> - hda_index = drive_add(HD_ALIAS, argv[optind++], 0);
> + hda_index = drive_add(argv[optind++], HD_ALIAS, 0);
> } else {
> const QEMUOption *popt;
>
> @@ -8273,11 +8282,11 @@ int main(int argc, char **argv)
> break;
> case QEMU_OPTION_hda:
> if (cyls == 0)
> - hda_index = drive_add(HD_ALIAS, optarg, 0);
> + hda_index = drive_add(optarg, HD_ALIAS, 0);
> else
> - hda_index = drive_add(HD_ALIAS
> + hda_index = drive_add(optarg, HD_ALIAS
> ",cyls=%d,heads=%d,secs=%d%s",
> - optarg, 0, cyls, heads, secs,
> + 0, cyls, heads, secs,
> translation == BIOS_ATA_TRANSLATION_LBA ?
> ",trans=lba" :
> translation == BIOS_ATA_TRANSLATION_NONE ?
> @@ -8286,19 +8295,19 @@ int main(int argc, char **argv)
> case QEMU_OPTION_hdb:
> case QEMU_OPTION_hdc:
> case QEMU_OPTION_hdd:
> - drive_add(HD_ALIAS, optarg, popt->index - QEMU_OPTION_hda);
> + drive_add(optarg, HD_ALIAS, popt->index - QEMU_OPTION_hda);
> break;
> case QEMU_OPTION_drive:
> - drive_add("%s", optarg);
> + drive_add(optarg, "");
> break;
> case QEMU_OPTION_mtdblock:
> - drive_add(MTD_ALIAS, optarg);
> + drive_add(optarg, MTD_ALIAS);
> break;
> case QEMU_OPTION_sd:
> - drive_add("file=\"%s\"," SD_ALIAS, optarg);
> + drive_add(optarg, SD_ALIAS);
> break;
> case QEMU_OPTION_pflash:
> - drive_add(PFLASH_ALIAS, optarg);
> + drive_add(optarg, PFLASH_ALIAS);
> break;
> case QEMU_OPTION_snapshot:
> snapshot = 1;
> @@ -8338,10 +8347,10 @@ int main(int argc, char **argv)
> exit(1);
> }
> if (hda_index != -1)
> - snprintf(drives_opt[hda_index] +
> - strlen(drives_opt[hda_index]),
> - sizeof(drives_opt[0]) -
> - strlen(drives_opt[hda_index]),
> + snprintf(drives_opt[hda_index].opt +
> + strlen(drives_opt[hda_index].opt),
> + sizeof(drives_opt[0].opt) -
> + strlen(drives_opt[hda_index].opt),
> ",cyls=%d,heads=%d,secs=%d%s",
> cyls, heads, secs,
> translation == BIOS_ATA_TRANSLATION_LBA ?
> @@ -8366,7 +8375,7 @@ int main(int argc, char **argv)
> kernel_cmdline = optarg;
> break;
> case QEMU_OPTION_cdrom:
> - drive_add("file=\"%s\"," CDROM_ALIAS, optarg);
> + drive_add(optarg, CDROM_ALIAS);
> break;
> case QEMU_OPTION_boot:
> boot_devices = optarg;
> @@ -8401,8 +8410,7 @@ int main(int argc, char **argv)
> break;
> case QEMU_OPTION_fda:
> case QEMU_OPTION_fdb:
> - drive_add("file=\"%s\"," FD_ALIAS, optarg,
> - popt->index - QEMU_OPTION_fda);
> + drive_add(optarg, FD_ALIAS, popt->index - QEMU_OPTION_fda);
> break;
> #ifdef TARGET_I386
> case QEMU_OPTION_no_fd_bootchk:
> @@ -8871,22 +8879,22 @@ int main(int argc, char **argv)
> /* we always create the cdrom drive, even if no disk is there */
>
> if (nb_drives_opt < MAX_DRIVES)
> - drive_add(CDROM_ALIAS);
> + drive_add(NULL, CDROM_ALIAS);
>
> /* we always create at least one floppy */
>
> if (nb_drives_opt < MAX_DRIVES)
> - drive_add(FD_ALIAS, 0);
> + drive_add(NULL, FD_ALIAS, 0);
>
> /* we always create one sd slot, even if no card is in it */
>
> if (nb_drives_opt < MAX_DRIVES)
> - drive_add(SD_ALIAS);
> + drive_add(NULL, SD_ALIAS);
>
> /* open the virtual block devices */
>
> for(i = 0; i < nb_drives_opt; i++)
> - if (drive_init(drives_opt[i], snapshot, machine) == -1)
> + if (drive_init(&drives_opt[i], snapshot, machine) == -1)
> exit(1);
>
> register_savevm("timer", 0, 2, timer_save, timer_load, NULL);
--
----------------- address@hidden ------------------
"La perfection est atteinte non quand il ne reste rien à
ajouter mais quand il ne reste rien à enlever." Saint Exupéry
signature.asc
Description: Ceci est une partie de message numériquement signée
- Re: [Qemu-devel] [PATCH] Fix double backslash problem in Windows, (continued)
- Re: [Qemu-devel] [PATCH] Fix double backslash problem in Windows, andrzej zaborowski, 2008/01/09
- Re: [Qemu-devel] [PATCH] Fix double backslash problem in Windows, Laurent Vivier, 2008/01/09
- Re: [Qemu-devel] [PATCH] Fix double backslash problem in Windows, Johannes Schindelin, 2008/01/09
- Re: [Qemu-devel] [PATCH] Fix double backslash problem in Windows, Laurent Vivier, 2008/01/09
- Re: [Qemu-devel] [PATCH] Fix double backslash problem in Windows, Johannes Schindelin, 2008/01/09
- Re: [Qemu-devel] [PATCH] Fix double backslash problem in Windows, Laurent Vivier, 2008/01/09
- Re: [Qemu-devel] [PATCH] Fix double backslash problem in Windows, andrzej zaborowski, 2008/01/09
- Re: [Qemu-devel] [PATCH] Fix double backslash problem in Windows, Laurent Vivier, 2008/01/09
- Re: [Qemu-devel] [PATCH] Fix double backslash problem in Windows, Johannes Schindelin, 2008/01/09
- Re: [Qemu-devel] [PATCH] Fix double backslash problem in Windows, Laurent Vivier, 2008/01/09
- Re: [Qemu-devel] [PATCH] Fix double backslash problem in Windows,
Laurent Vivier <=
- Re: [Qemu-devel] [PATCH] Fix double backslash problem in Windows, Johannes Schindelin, 2008/01/10
- Re: [Qemu-devel] [PATCH] Fix double backslash problem in Windows, Laurent Vivier, 2008/01/10
- Re: [Qemu-devel] [PATCH] Fix double backslash problem in Windows, Johannes Schindelin, 2008/01/10
- Re: [Qemu-devel] [PATCH] Fix double backslash problem in Windows, Laurent Vivier, 2008/01/10
- Re: [Qemu-devel] [PATCH] Fix double backslash problem in Windows, Avi Kivity, 2008/01/10
- Re: [Qemu-devel] [PATCH] Fix double backslash problem in Windows, Laurent Vivier, 2008/01/10
- Re: [Qemu-devel] Fix double backslash problem in Windows, Jernej Simončič, 2008/01/10
- Re: [Qemu-devel] Fix double backslash problem in Windows, Laurent Vivier, 2008/01/10
- Re: [Qemu-devel] Fix double backslash problem in Windows, Laurent Vivier, 2008/01/10
- Re: [Qemu-devel] Fix double backslash problem in Windows, Laurent Vivier, 2008/01/11