From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1IIraZ-0007gZ-K5 for qemu-devel@nongnu.org; Wed, 08 Aug 2007 15:53:03 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1IIraX-0007fr-UZ for qemu-devel@nongnu.org; Wed, 08 Aug 2007 15:53:03 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1IIraX-0007fn-Kr for qemu-devel@nongnu.org; Wed, 08 Aug 2007 15:53:01 -0400 Received: from rv-out-0910.google.com ([209.85.198.187]) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1IIraW-0005lv-OH for qemu-devel@nongnu.org; Wed, 08 Aug 2007 15:53:01 -0400 Received: by rv-out-0910.google.com with SMTP id k15so722721rvb for ; Wed, 08 Aug 2007 12:52:59 -0700 (PDT) Message-ID: <59abf66e0708081252of2948d7we85c9084bad245d4@mail.gmail.com> Date: Wed, 8 Aug 2007 16:52:58 -0300 From: "=?ISO-8859-1?Q?Jorge_Luc=E1ngeli_Obes?=" In-Reply-To: <59abf66e0708081124g14901b01i841b70d17ae1e097@mail.gmail.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_131058_15801810.1186602778297" References: <59abf66e0708081124g14901b01i841b70d17ae1e097@mail.gmail.com> Subject: [Qemu-devel] [PATCH 4/4][RFC] Add logic to QEMU to read command line options from qcow2 images Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org ------=_Part_131058_15801810.1186602778297 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline This patch makes QEMU check for command line options stored in qcow2 images= . Signed-off-by: Laurent Vivier Signed-off-by: Jorge Luc=E1ngeli Obes --- diff --git a/qemu/vl.c b/qemu/vl.c index 4ad39f1..1d28794 100644 --- a/qemu/vl.c +++ b/qemu/vl.c @@ -184,6 +184,11 @@ int time_drift_fix =3D 0; const char *cpu_vendor_string; /***********************************************************/ +/* Image annotation support */ + +char *img_get_annot(char *filename); + +/***********************************************************/ /* x86 ISA bus support */ target_phys_addr_t isa_mem_base =3D 0; @@ -6917,6 +6922,13 @@ int main(int argc, char **argv) char usb_devices[MAX_USB_CMDLINE][128]; int usb_devices_index; int fds[2]; + char *tmpannot; + char annot[1024]; + int done =3D 0; + unsigned int nbtoks =3D 0; + char *tok; + BlockDriver *drv; + BlockDriverState *bs; saved_argc =3D argc; saved_argv =3D argv; @@ -7000,6 +7012,58 @@ int main(int argc, char **argv) nb_nics =3D 0; /* default mac address of the first network interface */ + bdrv_init(); + + drv =3D bdrv_find_format("qcow2"); + + if (argc > 1 && argv[1][0] !=3D '-') { + bs =3D bdrv_new(""); + if (!bs) { + fprintf(stderr, "Not enough memory"); + exit(1); + } + if (bdrv_open2(bs, argv[1], 0, drv) < 0) { + fprintf(stderr, "Could not open '%s'", argv[1]); + bdrv_delete(bs); + exit(1); + } + + tmpannot =3D bdrv_get_annot(bs, "commandline_args"); + if (tmpannot) { + pstrcpy(annot, 1024, tmpannot); + + do { + tok =3D strtok(nbtoks =3D=3D 0? tmpannot : NULL, " "); + + if (tok !=3D NULL) + nbtoks++; + else + done =3D 1; + } while (!done); + + free(tmpannot); + + if (nbtoks > 0) { + char **argvprime =3D malloc((nbtoks + argc) * sizeof(char*= )); + + for (i =3D 0; i < argc; i++) + argvprime[i] =3D argv[i]; + + for (i =3D 0; i < nbtoks; i++) + argvprime[i + argc] =3D strtok(i =3D=3D 0? annot : NUL= L, " "); + + argv =3D argvprime; + argc =3D argc + nbtoks; + + for (i =3D 0; i < nbtoks + 2; i++) + printf("argv[%d] =3D %s\n", i, argv[i]); + + } + } + + bdrv_delete(bs); + } + optind =3D 1; for(;;) { if (optind >=3D argc) @@ -7558,7 +7622,6 @@ int main(int argc, char **argv) #endif /* we always create the cdrom drive, even if no disk is there */ - bdrv_init(); if (cdrom_index >=3D 0) { bs_table[cdrom_index] =3D bdrv_new("cdrom"); bdrv_set_type_hint(bs_table[cdrom_index], BDRV_TYPE_CDROM); @@ -7764,5 +7827,8 @@ int main(int argc, char **argv) main_loop(); quit_timers(); + + /* was reassigned above so it needs free()ing */ + free(argv); return 0; } ------=_Part_131058_15801810.1186602778297 Content-Type: text/x-patch; name=qemu.patch; charset=ANSI_X3.4-1968 Content-Transfer-Encoding: base64 X-Attachment-Id: f_f545glqk Content-Disposition: attachment; filename="qemu.patch" VGhpcyBwYXRjaCBtYWtlcyBRRU1VIGNoZWNrIGZvciBjb21tYW5kIGxpbmUgb3B0aW9ucyBzdG9y ZWQgaW4gcWNvdzIgaW1hZ2VzLgoKU2lnbmVkLW9mZi1ieTogTGF1cmVudCBWaXZpZXIgPExhdXJl bnQuVml2aWVyQGJ1bGwubmV0PgpTaWduZWQtb2ZmLWJ5OiBKb3JnZSBMdWPDoW5nZWxpIE9iZXMg PHQ0bTV5bkBnbWFpbC5jb20+Ci0tLQpkaWZmIC0tZ2l0IGEvcWVtdS92bC5jIGIvcWVtdS92bC5j CmluZGV4IDRhZDM5ZjEuLjFkMjg3OTQgMTAwNjQ0Ci0tLSBhL3FlbXUvdmwuYworKysgYi9xZW11 L3ZsLmMKQEAgLTE4NCw2ICsxODQsMTEgQEAgaW50IHRpbWVfZHJpZnRfZml4ID0gMDsKIGNvbnN0 IGNoYXIgKmNwdV92ZW5kb3Jfc3RyaW5nOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBJbWFnZSBhbm5vdGF0aW9uIHN1 cHBvcnQgKi8KKworY2hhciAqaW1nX2dldF9hbm5vdChjaGFyICpmaWxlbmFtZSk7CisKKy8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K IC8qIHg4NiBJU0EgYnVzIHN1cHBvcnQgKi8KIAogdGFyZ2V0X3BoeXNfYWRkcl90IGlzYV9tZW1f YmFzZSA9IDA7CkBAIC02OTE3LDYgKzY5MjIsMTMgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQogICAgIGNoYXIgdXNiX2RldmljZXNbTUFYX1VTQl9DTURMSU5FXVsxMjhdOwogICAg IGludCB1c2JfZGV2aWNlc19pbmRleDsKICAgICBpbnQgZmRzWzJdOworICAgIGNoYXIgKnRtcGFu bm90OworICAgIGNoYXIgYW5ub3RbMTAyNF07CisgICAgaW50IGRvbmUgPSAwOworICAgIHVuc2ln bmVkIGludCBuYnRva3MgPSAwOworICAgIGNoYXIgKnRvazsKKyAgICBCbG9ja0RyaXZlciAqZHJ2 OworICAgIEJsb2NrRHJpdmVyU3RhdGUgKmJzOwogCiAgICAgc2F2ZWRfYXJnYyA9IGFyZ2M7CiAg ICAgc2F2ZWRfYXJndiA9IGFyZ3Y7CkBAIC03MDAwLDYgKzcwMTIsNTggQEAgaW50IG1haW4oaW50 IGFyZ2MsIGNoYXIgKiphcmd2KQogICAgIG5iX25pY3MgPSAwOwogICAgIC8qIGRlZmF1bHQgbWFj IGFkZHJlc3Mgb2YgdGhlIGZpcnN0IG5ldHdvcmsgaW50ZXJmYWNlICovCiAgICAgCisgICAgYmRy dl9pbml0KCk7CisKKyAgICBkcnYgPSBiZHJ2X2ZpbmRfZm9ybWF0KCJxY293MiIpOworICAgIAor ICAgIGlmIChhcmdjID4gMSAmJiBhcmd2WzFdWzBdICE9ICctJykgeworICAgICAgICBicyA9IGJk cnZfbmV3KCIiKTsKKyAgICAgICAgaWYgKCFicykgeworICAgICAgICAgICAgZnByaW50ZihzdGRl cnIsICJOb3QgZW5vdWdoIG1lbW9yeSIpOworICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAg fQorICAgICAgICBpZiAoYmRydl9vcGVuMihicywgYXJndlsxXSwgMCwgZHJ2KSA8IDApIHsKKyAg ICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IG9wZW4gJyVzJyIsIGFyZ3ZbMV0p OworICAgICAgICAgICAgYmRydl9kZWxldGUoYnMpOworICAgICAgICAgICAgZXhpdCgxKTsKKyAg ICAgICAgfQorCisgICAgICAgIHRtcGFubm90ID0gYmRydl9nZXRfYW5ub3QoYnMsICJjb21tYW5k bGluZV9hcmdzIik7CisgICAgICAgIGlmICh0bXBhbm5vdCkgeworICAgICAgICAgICAgcHN0cmNw eShhbm5vdCwgMTAyNCwgdG1wYW5ub3QpOworCisgICAgICAgICAgICBkbyB7CisgICAgICAgICAg ICAgICAgdG9rID0gc3RydG9rKG5idG9rcyA9PSAwPyB0bXBhbm5vdCA6IE5VTEwsICIgIik7CisK KyAgICAgICAgICAgICAgICBpZiAodG9rICE9IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIG5i dG9rcysrOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZG9uZSA9 IDE7CisgICAgICAgICAgICB9IHdoaWxlICghZG9uZSk7CisKKyAgICAgICAgICAgIGZyZWUodG1w YW5ub3QpOyAgICAgICAgICAgIAorCisgICAgICAgICAgICBpZiAobmJ0b2tzID4gMCkgeworICAg ICAgICAgICAgICAgIGNoYXIgKiphcmd2cHJpbWUgPSBtYWxsb2MoKG5idG9rcyArIGFyZ2MpICog c2l6ZW9mKGNoYXIqKSk7CisKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJnYzsg aSsrKQorICAgICAgICAgICAgICAgICAgICBhcmd2cHJpbWVbaV0gPSBhcmd2W2ldOworCisgICAg ICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG5idG9rczsgaSsrKQorICAgICAgICAgICAgICAg ICAgICBhcmd2cHJpbWVbaSArIGFyZ2NdID0gc3RydG9rKGkgPT0gMD8gYW5ub3QgOiBOVUxMLCAi ICIpOworCisgICAgICAgICAgICAgICAgYXJndiA9IGFyZ3ZwcmltZTsKKyAgICAgICAgICAgICAg ICBhcmdjID0gYXJnYyArIG5idG9rczsKKworICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkg PCBuYnRva3MgKyAyOyBpKyspCisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiYXJndlslZF0g PSAlc1xuIiwgaSwgYXJndltpXSk7CisKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSAgICAKKwor ICAgICAgICBiZHJ2X2RlbGV0ZShicyk7CisgICAgfQorICAgICAgCiAgICAgb3B0aW5kID0gMTsK ICAgICBmb3IoOzspIHsKICAgICAgICAgaWYgKG9wdGluZCA+PSBhcmdjKQpAQCAtNzU1OCw3ICs3 NjIyLDYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogI2VuZGlmCiAKICAgICAv KiB3ZSBhbHdheXMgY3JlYXRlIHRoZSBjZHJvbSBkcml2ZSwgZXZlbiBpZiBubyBkaXNrIGlzIHRo ZXJlICovCi0gICAgYmRydl9pbml0KCk7CiAgICAgaWYgKGNkcm9tX2luZGV4ID49IDApIHsKICAg ICAgICAgYnNfdGFibGVbY2Ryb21faW5kZXhdID0gYmRydl9uZXcoImNkcm9tIik7CiAgICAgICAg IGJkcnZfc2V0X3R5cGVfaGludChic190YWJsZVtjZHJvbV9pbmRleF0sIEJEUlZfVFlQRV9DRFJP TSk7CkBAIC03NzY0LDUgKzc4MjcsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp CiAKICAgICBtYWluX2xvb3AoKTsKICAgICBxdWl0X3RpbWVycygpOworCisgICAgLyogd2FzIHJl YXNzaWduZWQgYWJvdmUgc28gaXQgbmVlZHMgZnJlZSgpaW5nICovCisgICAgZnJlZShhcmd2KTsK ICAgICByZXR1cm4gMDsKIH0K ------=_Part_131058_15801810.1186602778297--