qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Matthew Ogilvie <mmogilvi_qemu@miniinfo.net>
To: qemu-devel@nongnu.org
Cc: Matthew Ogilvie <mmogilvi_qemu@miniinfo.net>
Subject: [Qemu-devel] [PATCH v4 2/5] vl: fix -hdachs/-hda argument order parsing issues
Date: Sun,  2 Sep 2012 20:56:11 -0600	[thread overview]
Message-ID: <1346640974-30974-3-git-send-email-mmogilvi_qemu@miniinfo.net> (raw)
In-Reply-To: <1346640974-30974-1-git-send-email-mmogilvi_qemu@miniinfo.net>

Without this patch, the -hdachs argument had to occur either
BEFORE the corresponding "-hda" option, or AFTER the plain
disk image name (if neither -hda nor -drive is used).  Otherwise
it would effectively be ignored.

Option -hdachs still has no effect on -drive, but that seems best.

Signed-off-by: Matthew Ogilvie <mmogilvi_qemu@miniinfo.net>
---
 vl.c | 39 ++++++++++++++++++---------------------
 1 file changed, 18 insertions(+), 21 deletions(-)

diff --git a/vl.c b/vl.c
index 7c577fa..febfd62 100644
--- a/vl.c
+++ b/vl.c
@@ -2352,8 +2352,9 @@ int main(int argc, char **argv, char **envp)
     char boot_devices[33] = "cad"; /* default to HD->floppy->CD-ROM */
     DisplayState *ds;
     DisplayChangeListener *dcl;
-    int cyls, heads, secs, translation;
-    QemuOpts *hda_opts = NULL, *opts, *machine_opts;
+    char hdachs_params[512];  /* save -hdachs to apply to later -hda */
+    QemuOpts *hda_opts = NULL; /* save -hda to be modified by later -hdachs */
+    QemuOpts *opts, *machine_opts;
     QemuOptsList *olist;
     int optind;
     const char *optarg;
@@ -2408,8 +2409,7 @@ int main(int argc, char **argv, char **envp)
     cpu_model = NULL;
     ram_size = 0;
     snapshot = 0;
-    cyls = heads = secs = 0;
-    translation = BIOS_ATA_TRANSLATION_AUTO;
+    snprintf(hdachs_params, sizeof(hdachs_params), "%s", HD_OPTS);
 
     for (i = 0; i < MAX_NODES; i++) {
         node_mem[i] = 0;
@@ -2457,7 +2457,7 @@ int main(int argc, char **argv, char **envp)
         if (optind >= argc)
             break;
         if (argv[optind][0] != '-') {
-	    hda_opts = drive_add(IF_DEFAULT, 0, argv[optind++], HD_OPTS);
+            hda_opts = drive_add(IF_DEFAULT, 0, argv[optind++], hdachs_params);
         } else {
             const QEMUOption *popt;
 
@@ -2475,21 +2475,8 @@ int main(int argc, char **argv, char **envp)
                 cpu_model = optarg;
                 break;
             case QEMU_OPTION_hda:
-                {
-                    char buf[256];
-                    if (cyls == 0)
-                        snprintf(buf, sizeof(buf), "%s", HD_OPTS);
-                    else
-                        snprintf(buf, sizeof(buf),
-                                 "%s,cyls=%d,heads=%d,secs=%d%s",
-                                 HD_OPTS , cyls, heads, secs,
-                                 translation == BIOS_ATA_TRANSLATION_LBA ?
-                                 ",trans=lba" :
-                                 translation == BIOS_ATA_TRANSLATION_NONE ?
-                                 ",trans=none" : "");
-                    drive_add(IF_DEFAULT, 0, optarg, buf);
-                    break;
-                }
+                hda_opts = drive_add(IF_DEFAULT, 0, optarg, hdachs_params);
+                break;
             case QEMU_OPTION_hdb:
             case QEMU_OPTION_hdc:
             case QEMU_OPTION_hdd:
@@ -2523,7 +2510,10 @@ int main(int argc, char **argv, char **envp)
                 break;
             case QEMU_OPTION_hdachs:
                 {
+                    int cyls, heads, secs, translation;
                     const char *p;
+                    cyls = heads = secs = 0;
+                    translation = BIOS_ATA_TRANSLATION_AUTO;
                     p = optarg;
                     cyls = strtol(p, (char **)&p, 0);
                     if (cyls < 1 || cyls > 16383)
@@ -2555,7 +2545,14 @@ int main(int argc, char **argv, char **envp)
                         fprintf(stderr, "qemu: invalid physical CHS format\n");
                         exit(1);
                     }
-		    if (hda_opts != NULL) {
+                    snprintf(hdachs_params, sizeof(hdachs_params),
+                             "%s,cyls=%d,heads=%d,secs=%d%s",
+                             HD_OPTS , cyls, heads, secs,
+                             translation == BIOS_ATA_TRANSLATION_LBA ?
+                             ",trans=lba" :
+                             translation == BIOS_ATA_TRANSLATION_NONE ?
+                             ",trans=none" : "");
+                    if (hda_opts != NULL) {
                         char num[16];
                         snprintf(num, sizeof(num), "%d", cyls);
                         qemu_opt_set(hda_opts, "cyls", num);
-- 
1.7.10.2.484.gcd07cc5

  parent reply	other threads:[~2012-09-03  2:57 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-09-03  2:56 [Qemu-devel] [PATCH v4 0/5] Running Microport UNIX (ca 1987) Matthew Ogilvie
2012-09-03  2:56 ` [Qemu-devel] [PATCH v4 1/5] fix some debug printf format strings Matthew Ogilvie
2012-09-03  2:56 ` Matthew Ogilvie [this message]
2012-09-03  2:56 ` [Qemu-devel] [PATCH v4 3/5] qemu-options.hx: mention retrace= VGA option Matthew Ogilvie
2012-09-03  2:56 ` [Qemu-devel] [PATCH v4 4/5] vga: add some optional CGA compatibility hacks Matthew Ogilvie
2012-09-03  2:56 ` [Qemu-devel] [PATCH v4 5/5] i8259: fix dynamically masking slave IRQs with IMR register Matthew Ogilvie
2012-09-03  7:08   ` Paolo Bonzini
2012-09-03  8:40   ` Andreas Färber
2012-09-03 14:39     ` Avi Kivity
2012-09-03 15:42       ` Juan Quintela
2012-09-03 15:45         ` Jan Kiszka
2012-09-03 15:52         ` Avi Kivity
2012-09-03 15:54           ` Jan Kiszka
2012-09-03 15:57             ` Avi Kivity
2012-09-03 16:02               ` Jan Kiszka
2012-09-03 16:15                 ` Avi Kivity
2012-09-03 16:23                   ` Paolo Bonzini
2012-09-03 16:30                     ` Avi Kivity
2012-09-03 16:33                       ` Paolo Bonzini
2012-09-03 16:40                         ` Jan Kiszka
2012-09-03 16:56                           ` Paolo Bonzini
2012-09-04  8:16                         ` Avi Kivity
2012-09-04  9:15                           ` Paolo Bonzini
2012-09-04  9:20                             ` Avi Kivity
2012-09-04  9:29                               ` BALATON Zoltan
2012-09-04  9:37                                 ` Avi Kivity
2012-09-04  9:51                                   ` Jan Kiszka
2012-09-04 10:06                                     ` Paolo Bonzini
2012-09-04 10:44                                       ` Avi Kivity
2012-09-03 16:30                   ` Jan Kiszka
2012-09-03  8:51   ` Jan Kiszka
2012-09-03  8:53     ` Jan Kiszka
2012-09-03  9:34     ` Paolo Bonzini
2012-09-03 10:34       ` Jan Kiszka
2012-09-03 11:11         ` Paolo Bonzini
2012-09-03 11:26           ` Jan Kiszka
2012-09-04 14:29     ` Maciej W. Rozycki
2012-09-04 14:42       ` Paolo Bonzini
2012-09-04 16:01         ` Jan Kiszka
2012-09-04 17:41           ` Maciej W. Rozycki
2012-09-04 17:55             ` Jan Kiszka
2012-09-04 18:27               ` Maciej W. Rozycki
2012-09-04 18:39                 ` Jan Kiszka
2012-09-05  4:33         ` Matthew Ogilvie
2012-09-05 15:43           ` Jan Kiszka

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1346640974-30974-3-git-send-email-mmogilvi_qemu@miniinfo.net \
    --to=mmogilvi_qemu@miniinfo.net \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).