qemu-devel
[Top][All Lists]
Advanced

[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

Attachment: signature.asc
Description: Ceci est une partie de message numériquement signée


reply via email to

[Prev in Thread] Current Thread [Next in Thread]