From mboxrd@z Thu Jan 1 00:00:00 1970 From: Anthony Liguori Subject: Re: [PATCH][RFC] Allowing QEMU to directly execute a directory (and storing command line options in it) Date: Fri, 31 Aug 2007 13:54:17 -0500 Message-ID: <1188586457.8543.2.camel@squirrel> References: <59abf66e0708311119p2b83fcffg31fac1c298cfc10a@mail.gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org, qemu-devel-qX2TKyscuCcdnm+yROfE0A@public.gmane.org To: Jorge =?ISO-8859-1?Q?Luc=E1ngeli?= Obes Return-path: In-Reply-To: <59abf66e0708311119p2b83fcffg31fac1c298cfc10a-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: kvm-devel-bounces-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org Errors-To: kvm-devel-bounces-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org List-Id: kvm.vger.kernel.org SXQgbWFrZXMgbGl0dGxlIHNlbnNlIHRvIHBhc3MgYSBkaXJlY3Rvcnkgd2hlbiB5b3UgY2FuIHBh c3MgYSBjb25maWcKZmlsZSBhbmQgYXNzdW1lIHRoYXQgdGhlIGRpcmVjdG9yeSB0aGUgY29uZmln IGZpbGUgaXMgaW4gaXMgdGhlIENXRC4KCkZvciBpbnN0YW5jZSwgaWYgdm0uY2ZnIGNvbnRhaW5l ZCBqdXN0IHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzLCB5b3UKY291bGQgaGF2ZToKCk15SW1h Z2Uvdm0uY2ZnOiAgICAgICAgLWhkYSBkaXNrMC5xY293IC1tIDUxMgpNeUltYWdlL2Rpc2swLnFj b3c6ICAgIDxkaXNrIGltYWdlPgoKQW5kIHRoZW4gZG86CgpxZW11IC1jIE15SW1hZ2Uvdm0uY2Zn CgpSZWdhcmRzLAoKQW50aG9ueSBMaWd1b3JpCgoKT24gRnJpLCAyMDA3LTA4LTMxIGF0IDE1OjE5 IC0wMzAwLCBKb3JnZSBMdWPDoW5nZWxpIE9iZXMgd3JvdGU6Cj4gSGkgYWxsLAo+IAo+IFRoZSBs YXN0IHRpbWUgdGhpcyBpc3N1ZSB3YXMgZGlzY3Vzc2VkLCB0aGUgZXhlY3V0YWJsZS1kaXJlY3Rv cnkgaWRlYQo+IGdhaW5lZCBtb3JlIGNvbnNlbnN1cyB0aGFuIHRoZSBzbmFwc2hvdC1iYXNlZCBp ZGVhLiBUaGlzIHBhdGNoCj4gaW1wbGVtZW50cyBteSBwZXJjZXB0aW9uIG9mIHRoZSBmaXJzdCBp ZGVhLiBOb24tV2luZG93cyBmb3Igbm93LCBhcyBJCj4gY2FuJ3QgdGVzdCBvbiBhIFdpbmRvd3Mg c3lzdGVtLiBTdWdnZXN0aW9ucyBhbmQgY29uc3RydWN0aXZlIGNyaXRpY2lzbQo+IG1vcmUgdGhh biB3ZWxjb21lLgo+IAo+IENoZWVycywKPiBKb3JnZQo+IAo+IFRoaXMgcGF0Y2ggYWxsb3dzIFFF TVUgdG8gZXhlY3V0ZSBhIGRpcmVjdG9yeSB3aXRoIGEgc3BlY2lhbCBmb3JtYXQuCj4gCj4gVGhp cyBwYXRjaCBhbGxvd3Mgc3RvcmluZyBjb21tYW5kIGxpbmUgb3B0aW9ucyBpbiBhIGNvbmZpZ3Vy YXRpb24gZmlsZSBpbnNpZGUKPiBhIGRpcmVjdG9yeSBhbmQgdGhlbiBkaXJlY3RseSBleGVjdXRp bmcgdGhhdCBkaXJlY3RvcnkuIEEgc2ltcGxlIGNoZWNrIGlzCj4gaW5jbHVkZWQgdG8gcHJldmVu dCB0aGUgY29uZmlndXJhdGlvbiBmaWxlIHRvIGFjY2VzcyBpbWFnZSBmaWxlcyBvdXRzaWRlCj4g dGhlIGV4ZWN1dGVkIGRpcmVjdG9yeS4gRXh0cmEgY29tbWFuZCBsaW5lIG9wdGlvbnMgY2FuIGJl IHBhc3NlZCBvbiBpbnZvY2F0aW9uLAo+IHdoaWNoIHdpbGwgdGFrZSBwcmVjZWRlbmNlIG92ZXIg dGhlIG9uZXMgc3RvcmVkIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuCj4gCj4gVGhlIGNvbmZp Z3VyYXRpb24gZmlsZSBzcGVjaWZpZXMsIG9uIGl0cyBmaXJzdCBsaW5lLCB0aGUgaW1hZ2UgZmls ZSB0byB1c2UuCj4gVGhlIHJlc3Qgb2YgdGhlIGZpbGUgc3BlY2lmaWVzIGNvbW1hbmQgbGluZSBv cHRpb25zIHNlcGFyYXRlZCBieSBzcGFjZXMgb3IKPiBuZXdsaW5lcy4gQ2FyZWZ1bCByZWNvbnN0 cnVjdGlvbiBvZiB0aGUgY29tbWFuZCBsaW5lIG1ha2VzIHN1cmUgdGhlIHNwZWZpY2llZAo+IGlt YWdlIGZpbGUgZ2V0cyBleGVjdXRlZCBldmVuIGlmIG90aGVyIGltYWdlIGZpbGVzIHdlcmUgaW5j bHVkZWQgbGF0ZXIgaW4gdGhlCj4gY29uZmlndXJhdGlvbiBmaWxlLgo+IAo+IFNpZ25lZC1vZmYt Ynk6IEpvcmdlIEx1Y8OhbmdlbGkgT2Jlcwo+IC0tLQo+IGRpZmYgLS1naXQgYS9xZW11L3ZsLmMg Yi9xZW11L3ZsLmMKPiBpbmRleCBmY2M4OTliLi44OGNlZmQyIDEwMDY0NAo+IC0tLSBhL3FlbXUv dmwuYwo+ICsrKyBiL3FlbXUvdmwuYwo+IEBAIC00Miw4ICs0Miw4IEBACj4gICNpbmNsdWRlIDxu ZXRpbmV0L2luLmg+Cj4gICNpbmNsdWRlIDxkaXJlbnQuaD4KPiAgI2luY2x1ZGUgPG5ldGRiLmg+ Cj4gLSNpZmRlZiBfQlNECj4gICNpbmNsdWRlIDxzeXMvc3RhdC5oPgo+ICsjaWZkZWYgX0JTRAo+ ICAjaWZuZGVmIF9fQVBQTEVfXwo+ICAjaW5jbHVkZSA8bGlidXRpbC5oPgo+ICAjZW5kaWYKPiBA QCAtNjM2Nyw5ICs2MzY3LDE2IEBAIGludCBtYWluX2xvb3Aodm9pZCkKPiAgdm9pZCBoZWxwKHZv aWQpCj4gIHsKPiAgICAgIHByaW50ZigiUUVNVSBQQyBlbXVsYXRvciB2ZXJzaW9uICIgUUVNVV9W RVJTSU9OICIsIENvcHlyaWdodCAoYykKPiAyMDAzLTIwMDcgRmFicmljZSBCZWxsYXJkXG4iCj4g LSAgICAgICAgICAgInVzYWdlOiAlcyBbb3B0aW9uc10gW2Rpc2tfaW1hZ2VdXG4iCj4gKyAgICAg ICAgICAgInVzYWdlOiAlcyBbb3B0aW9uc10gW2Rpc2tfaW1hZ2V8Zm9sZGVyXVxuIgo+ICAgICAg ICAgICAgICJcbiIKPiArI2lmZGVmIF9XSU4zMgo+ICAgICAgICAgICAgICInZGlza19pbWFnZScg aXMgYSByYXcgaGFyZCBpbWFnZSBpbWFnZSBmb3IgSURFIGhhcmQgZGlzayAwXG4iCj4gKyNlbHNl Cj4gKyAgICAgICAgICAgIidkaXNrX2ltYWdlJyBpcyBhIHJhdyBoYXJkIGltYWdlIGltYWdlIGZv ciBJREUgaGFyZCBkaXNrIDAgb3JcbiIKPiArICAgICAgICAgICAiJ2ZvbGRlcicgaXMgYSBmb2xk ZXIgd2l0aCBhIGZpbGUgJ2NvbmZpZycgY29udGFpbmluZyBpbgo+IHRoZSBmaXJzdCBsaW5lXG4i Cj4gKyAgICAgICAgICAgInRoZSBuYW1lIG9mIGFuIGltYWdlIGZpbGUgaW5zaWRlIHRoZSBmb2xk ZXIgYW5kIGluIHRoZQo+IHJlc3Qgb2YgdGhlIGZpbGVcbiIKPiArICAgICAgICAgICAib3B0aW9u cyBzZXBhcmF0ZWQgYnkgJyAnIG9yICdcXG4nXG4iCj4gKyNlbmRpZgo+ICAgICAgICAgICAgICJc biIKPiAgICAgICAgICAgICAiU3RhbmRhcmQgb3B0aW9uczpcbiIKPiAgICAgICAgICAgICAiLU0g bWFjaGluZSAgICAgIHNlbGVjdCBlbXVsYXRlZCBtYWNoaW5lICgtTSA/IGZvciBsaXN0KVxuIgo+ IEBAIC02ODkyLDYgKzY4OTksMjAgQEAgdm9pZCBxZW11X2dldF9sYXVuY2hfaW5mbyhpbnQgKmFy Z2MsIGNoYXIKPiAqKiphcmd2LCBpbnQgKm9wdF9kYWVtb25pemUsIGNvbnN0IGNoYQo+ICAgICAg Km9wdF9pbmNvbWluZyA9IGluY29taW5nOwo+ICB9Cj4gCj4gK2NoYXIgKmRpcl9maWxlX2NhdChj b25zdCBjaGFyICpmb2xkZXIsIGNvbnN0IGNoYXIgKmZpbGUpIHsKPiArICAgIGludCBmb2xkbGVu ID0gc3RybGVuKGZvbGRlcik7Cj4gKyAgICBpbnQgZmlsZWxlbiA9IHN0cmxlbihmaWxlKTsKPiAr ICAgIGludCByZXNsZW4gPSBmb2xkbGVuICsgMSArIGZpbGVsZW4gKyAxOwo+ICsKPiArICAgIGNo YXIgKnJlcyA9IG1hbGxvYyhzaXplb2YoY2hhcikgKiByZXNsZW4pOwo+ICsKPiArICAgIHBzdHJj cHkocmVzLCByZXNsZW4sIGZvbGRlcik7Cj4gKyAgICBzdHJuY2F0KHJlcywgIi8iLCAxKTsKPiAr ICAgIHN0cm5jYXQocmVzLCBmaWxlLCBmaWxlbGVuKTsKPiArCj4gKyAgICByZXR1cm4gcmVzOwo+ ICt9Cj4gKwo+ICBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCj4gIHsKPiAgI2lmZGVm IENPTkZJR19HREJTVFVCCj4gQEAgLTcwMDMsNyArNzAyNCwxMjAgQEAgaW50IG1haW4oaW50IGFy Z2MsIGNoYXIgKiphcmd2KQo+IAo+ICAgICAgbmJfbmljcyA9IDA7Cj4gICAgICAvKiBkZWZhdWx0 IG1hYyBhZGRyZXNzIG9mIHRoZSBmaXJzdCBuZXR3b3JrIGludGVyZmFjZSAqLwo+ICsKPiArI2lm bmRlZiBfV0lOMzIKPiArI2RlZmluZSBESVJfQ01ETElORV9TSVpFIDE8PDEzCj4gKyAgICBpbnQg aGRfZm91bmQgPSAwOwo+ICsgICAgY2hhciAqZGlyLCAqb3B0czsKPiArICAgIHN0cnVjdCBzdGF0 ICpzID0gTlVMTDsKPiArCj4gKyAgICBvcHRpbmQgPSAxOwo+ICsgICAgZm9yKDs7KSB7Cj4gKyAg ICAgICAgaWYgKG9wdGluZCA+PSBhcmdjKQo+ICsgICAgICAgICAgICBicmVhazsKPiArCj4gKyAg ICAgICAgZGlyID0gYXJndltvcHRpbmQrK107Cj4gKwo+ICsgICAgICAgIGlmIChkaXJbMF0gIT0g Jy0nKSB7Cj4gKyAgICAgICAgICAgIGhkX2ZvdW5kID0gMTsKPiArICAgICAgICAgICAgYnJlYWs7 Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+IAo+ICsgICAgaWYgKGhkX2ZvdW5kKSB7Cj4gKyAgICAg ICAgcyA9IG1hbGxvYyhzaXplb2YoKnMpKTsKPiArCj4gKyAgICAgICAgaWYgKHN0YXQoZGlyLCBz KSA8IDApIHsKPiArICAgICAgICAgICAgLyogRXJyb3IgKi8KPiArICAgICAgICAgICAgZnByaW50 ZihzdGRlcnIsICJ1bmFibGUgdG8gc3RhdDogJyVzJ1xuIiwKPiArICAgICAgICAgICAgICAgICAg ICBkaXIpOwo+ICsgICAgICAgICAgICBleGl0KDEpOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAg ICAgaWYgKFNfSVNESVIocy0+c3RfbW9kZSkpIHsKPiArICAgICAgICAgICAgLyogVGhlIHVzZXIg c3BlY2lmaWVkIGEgZGlyZWN0b3J5LCBzZWFyY2ggZm9yIC4vY29uZmlnICovCj4gKyAgICAgICAg ICAgIGludCBjb25maWdsZW4gPSBzdHJsZW4oZGlyKTsKPiArICAgICAgICAgICAgY29uZmlnbGVu ICs9IDg7IC8qICIvY29uZmlnXDAiICovCj4gKyAgICAgICAgICAgIGNoYXIgKmNvbmZpZyA9IG1h bGxvYyhzaXplb2YoY2hhcikgKiBjb25maWdsZW4pOwo+ICsKPiArICAgICAgICAgICAgcHN0cmNw eShjb25maWcsIGNvbmZpZ2xlbiwgZGlyKTsKPiArICAgICAgICAgICAgc3RybmNhdChjb25maWcs ICIvY29uZmlnIiwgNyk7Cj4gKwo+ICsgICAgICAgICAgICBpbnQgZmRfY29uZmlnOwo+ICsKPiAr ICAgICAgICAgICAgaWYgKChmZF9jb25maWcgPSBvcGVuKGNvbmZpZywgMCkpIDwgMCkgewo+ICsg ICAgICAgICAgICAgICAgLyogRXJyb3IgKi8KPiArICAgICAgICAgICAgICAgIGlmIChlcnJubyA9 PSBFTk9FTlQpCj4gKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJjb25maWcg ZmlsZSBub3QgZm91bmQ6ICclcydcbiIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25maWcpOwo+ICsgICAgICAgICAgICAgICAgZWxzZQo+ICsgICAgICAgICAgICAgICAgICAgIGZw cmludGYoc3RkZXJyLCAidW5hYmxlIHRvIG9wZW4gY29uZmlnIGZpbGU6ICclcydcbiIsCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcpOwo+ICsgICAgICAgICAgICAgICAgZXhp dCgxKTsKPiArICAgICAgICAgICAgfQo+ICsKPiArICAgICAgICAgICAgb3B0cyA9IG1hbGxvYyhz aXplb2YoY2hhcikgKiAoRElSX0NNRExJTkVfU0laRSkpOwo+ICsKPiArICAgICAgICAgICAgc3Np emVfdCByZWFkYiA9IHJlYWQoZmRfY29uZmlnLCBvcHRzLCAoRElSX0NNRExJTkVfU0laRSkgLSAx KTsKPiArCj4gKyAgICAgICAgICAgIG9wdHNbcmVhZGJdID0gJ1wwJzsKPiArCj4gKyAgICAgICAg ICAgIGNoYXIgKmZpbGVuYW1lID0gc3Ryc2VwKCZvcHRzLCAiXG4iKTsKPiArCj4gKyAgICAgICAg ICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKSB7Cj4gKyAgICAgICAgICAgICAgICAvKiBFcnJvciAq Lwo+ICsgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJtYWxmb3JtZWQgY29uZmlndXJh dGlvbiBmaWxlOiAnJXMnXG4iLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICBjb25maWcpOwo+ ICsgICAgICAgICAgICAgICAgZXhpdCgxKTsKPiArICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJj aHIoZmlsZW5hbWUsICcvJykgIT0gTlVMTCkgewo+ICsgICAgICAgICAgICAgICAgLyogRXJyb3Ig Ki8KPiArICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJyVzJyBtYXkgcG9pbnQgb3V0 c2lkZSBmb2xkZXIgJyVzJ1xuIgo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJh dm9pZCB1c2luZyAnLycgaW4gY29uZmlnIGZpbGVcbiIsCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgIGZpbGVuYW1lLCBkaXIpOwo+ICsgICAgICAgICAgICAgICAgZXhpdCgxKTsKPiArICAgICAg ICAgICAgfQo+ICsKPiArICAgICAgICAgICAgY2hhciB0bXBvcHRzW0RJUl9DTURMSU5FX1NJWkVd Owo+ICsgICAgICAgICAgICBpbnQgZG9uZSA9IDA7Cj4gKyAgICAgICAgICAgIHVuc2lnbmVkIGlu dCBuYnRva3MgPSAwOwo+ICsgICAgICAgICAgICBjaGFyICp0b2s7Cj4gKwo+ICsgICAgICAgICAg ICBwc3RyY3B5KHRtcG9wdHMsIERJUl9DTURMSU5FX1NJWkUsIG9wdHMpOwo+ICsKPiArICAgICAg ICAgICAgZG8gewo+ICsgICAgICAgICAgICAgICAgdG9rID0gc3RydG9rKG5idG9rcyA9PSAwPyB0 bXBvcHRzIDogTlVMTCwgIiBcbiIpOwo+ICsKPiArICAgICAgICAgICAgICAgIGlmICh0b2sgIT0g TlVMTCkKPiArICAgICAgICAgICAgICAgICAgICBuYnRva3MrKzsKPiArICAgICAgICAgICAgICAg IGVsc2UKPiArICAgICAgICAgICAgICAgICAgICBkb25lID0gMTsKPiArICAgICAgICAgICAgfSB3 aGlsZSAoIWRvbmUpOwo+ICsKPiArICAgICAgICAgICAgaWYgKG5idG9rcyA+IDApIHsKPiArICAg ICAgICAgICAgICAgIGNoYXIgKiphcmd2cHJpbWUgPSBtYWxsb2MoKG5idG9rcyArIGFyZ2MgKyAx KSAqIHNpemVvZihjaGFyKikpOwo+ICsKPiArICAgICAgICAgICAgICAgIGFyZ3ZwcmltZVswXSA9 IGFyZ3ZbMF07Cj4gKwo+ICsgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG5idG9rczsg aSsrKQo+ICsgICAgICAgICAgICAgICAgICAgIGFyZ3ZwcmltZVtpICsgMV0gPSBzdHJ0b2soaSA9 PSAwPyBvcHRzIDogTlVMTCwgIiBcbiIpOwo+ICsKPiArICAgICAgICAgICAgICAgIGZvciAoaSA9 IDE7IGkgPCBhcmdjOyBpKyspCj4gKyAgICAgICAgICAgICAgICAgICAgYXJndnByaW1lW25idG9r cyArIGldID0gYXJndltpXTsKPiArCj4gKyAgICAgICAgICAgICAgICBhcmd2cHJpbWVbbmJ0b2tz ICsgYXJnY10gPSBkaXJfZmlsZV9jYXQoZGlyLCBmaWxlbmFtZSk7Cj4gKwo+ICsgICAgICAgICAg ICAgICAgYXJndiA9IGFyZ3ZwcmltZTsKPiArICAgICAgICAgICAgICAgIGFyZ2MgPSBuYnRva3Mg KyBhcmdjICsgMTsKPiArCj4gKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJnYzsg aSsrKQo+ICsgICAgICAgICAgICAgICAgICAgIHByaW50ZigiYXJndlslZF0gPSAlc1xuIiwgaSwg YXJndltpXSk7Cj4gKyAgICAgICAgICAgIH0KPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsg ICAgZnJlZShzKTsKPiArI2VuZGlmCj4gKwo+ICAgICAgb3B0aW5kID0gMTsKPiAgICAgIGZvcig7 Oykgewo+ICAgICAgICAgIGlmIChvcHRpbmQgPj0gYXJnYykKPiBAQCAtNzc3Myw1ICs3OTA3LDEw IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKPiAKPiAgICAgIG1haW5fbG9vcCgp Owo+ICAgICAgcXVpdF90aW1lcnMoKTsKPiArCj4gKyAgICAvKiBhcmd2IHdhcyBvdmVyd3JpdHRl biB3aGVuIHBhcnNpbmcgY29uZmlnIGZpbGUgKi8KPiArICAgIGlmIChoZF9mb3VuZCkKPiArICAg IAlmcmVlKGFyZ3YpOwo+ICsKPiAgICAgIHJldHVybiAwOwo+ICB9Cj4gLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQo+IFRoaXMgU0YubmV0IGVtYWlsIGlzIHNwb25zb3JlZCBieTogU3BsdW5rIEluYy4KPiBTdGls bCBncmVwcGluZyB0aHJvdWdoIGxvZyBmaWxlcyB0byBmaW5kIHByb2JsZW1zPyAgU3RvcC4KPiBO b3cgU2VhcmNoIGxvZyBldmVudHMgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMgdXNpbmcgQUpBWCBh bmQgYSBicm93c2VyLgo+IERvd25sb2FkIHlvdXIgRlJFRSBjb3B5IG9mIFNwbHVuayBub3cgPj4g IGh0dHA6Ly9nZXQuc3BsdW5rLmNvbS8KPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXyBrdm0tZGV2ZWwgbWFpbGluZyBsaXN0IGt2bS1kZXZlbEBsaXN0cy5z b3VyY2Vmb3JnZS5uZXQgaHR0cHM6Ly9saXN0cy5zb3VyY2Vmb3JnZS5uZXQvbGlzdHMvbGlzdGlu Zm8va3ZtLWRldmVsCgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpUaGlzIFNGLm5ldCBlbWFpbCBpcyBzcG9u c29yZWQgYnk6IFNwbHVuayBJbmMuClN0aWxsIGdyZXBwaW5nIHRocm91Z2ggbG9nIGZpbGVzIHRv IGZpbmQgcHJvYmxlbXM/ICBTdG9wLgpOb3cgU2VhcmNoIGxvZyBldmVudHMgYW5kIGNvbmZpZ3Vy YXRpb24gZmlsZXMgdXNpbmcgQUpBWCBhbmQgYSBicm93c2VyLgpEb3dubG9hZCB5b3VyIEZSRUUg Y29weSBvZiBTcGx1bmsgbm93ID4+ICBodHRwOi8vZ2V0LnNwbHVuay5jb20vCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmt2bS1kZXZlbCBtYWlsaW5nIGxp c3QKa3ZtLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldApodHRwczovL2xpc3RzLnNvdXJjZWZv cmdlLm5ldC9saXN0cy9saXN0aW5mby9rdm0tZGV2ZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1IRBda-0005jE-Kj for qemu-devel@nongnu.org; Fri, 31 Aug 2007 14:54:34 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1IRBdZ-0005ie-Up for qemu-devel@nongnu.org; Fri, 31 Aug 2007 14:54:34 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1IRBdZ-0005iZ-Q4 for qemu-devel@nongnu.org; Fri, 31 Aug 2007 14:54:33 -0400 Received: from nz-out-0506.google.com ([64.233.162.230]) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1IRBdZ-000129-9r for qemu-devel@nongnu.org; Fri, 31 Aug 2007 14:54:33 -0400 Received: by nz-out-0506.google.com with SMTP id f1so2504731nzc for ; Fri, 31 Aug 2007 11:54:29 -0700 (PDT) From: Anthony Liguori In-Reply-To: <59abf66e0708311119p2b83fcffg31fac1c298cfc10a@mail.gmail.com> References: <59abf66e0708311119p2b83fcffg31fac1c298cfc10a@mail.gmail.com> Content-Type: text/plain; charset=utf-8 Date: Fri, 31 Aug 2007 13:54:17 -0500 Message-Id: <1188586457.8543.2.camel@squirrel> Mime-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [Qemu-devel] Re: [kvm-devel] [PATCH][RFC] Allowing QEMU to directly execute a directory (and storing command line options in it) Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Jorge =?ISO-8859-1?Q?Luc=E1ngeli?= Obes Cc: kvm-devel@lists.sourceforge.net, qemu-devel@nongnu.org It makes little sense to pass a directory when you can pass a config file and assume that the directory the config file is in is the CWD. For instance, if vm.cfg contained just the command line arguments, you could have: MyImage/vm.cfg: -hda disk0.qcow -m 512 MyImage/disk0.qcow: And then do: qemu -c MyImage/vm.cfg Regards, Anthony Liguori On Fri, 2007-08-31 at 15:19 -0300, Jorge Lucángeli Obes wrote: > Hi all, > > The last time this issue was discussed, the executable-directory idea > gained more consensus than the snapshot-based idea. This patch > implements my perception of the first idea. Non-Windows for now, as I > can't test on a Windows system. Suggestions and constructive criticism > more than welcome. > > Cheers, > Jorge > > This patch allows QEMU to execute a directory with a special format. > > This patch allows storing command line options in a configuration file inside > a directory and then directly executing that directory. A simple check is > included to prevent the configuration file to access image files outside > the executed directory. Extra command line options can be passed on invocation, > which will take precedence over the ones stored in the configuration file. > > The configuration file specifies, on its first line, the image file to use. > The rest of the file specifies command line options separated by spaces or > newlines. Careful reconstruction of the command line makes sure the speficied > image file gets executed even if other image files were included later in the > configuration file. > > Signed-off-by: Jorge Lucángeli Obes > --- > diff --git a/qemu/vl.c b/qemu/vl.c > index fcc899b..88cefd2 100644 > --- a/qemu/vl.c > +++ b/qemu/vl.c > @@ -42,8 +42,8 @@ > #include > #include > #include > -#ifdef _BSD > #include > +#ifdef _BSD > #ifndef __APPLE__ > #include > #endif > @@ -6367,9 +6367,16 @@ int main_loop(void) > void help(void) > { > printf("QEMU PC emulator version " QEMU_VERSION ", Copyright (c) > 2003-2007 Fabrice Bellard\n" > - "usage: %s [options] [disk_image]\n" > + "usage: %s [options] [disk_image|folder]\n" > "\n" > +#ifdef _WIN32 > "'disk_image' is a raw hard image image for IDE hard disk 0\n" > +#else > + "'disk_image' is a raw hard image image for IDE hard disk 0 or\n" > + "'folder' is a folder with a file 'config' containing in > the first line\n" > + "the name of an image file inside the folder and in the > rest of the file\n" > + "options separated by ' ' or '\\n'\n" > +#endif > "\n" > "Standard options:\n" > "-M machine select emulated machine (-M ? for list)\n" > @@ -6892,6 +6899,20 @@ void qemu_get_launch_info(int *argc, char > ***argv, int *opt_daemonize, const cha > *opt_incoming = incoming; > } > > +char *dir_file_cat(const char *folder, const char *file) { > + int foldlen = strlen(folder); > + int filelen = strlen(file); > + int reslen = foldlen + 1 + filelen + 1; > + > + char *res = malloc(sizeof(char) * reslen); > + > + pstrcpy(res, reslen, folder); > + strncat(res, "/", 1); > + strncat(res, file, filelen); > + > + return res; > +} > + > int main(int argc, char **argv) > { > #ifdef CONFIG_GDBSTUB > @@ -7003,7 +7024,120 @@ int main(int argc, char **argv) > > nb_nics = 0; > /* default mac address of the first network interface */ > + > +#ifndef _WIN32 > +#define DIR_CMDLINE_SIZE 1<<13 > + int hd_found = 0; > + char *dir, *opts; > + struct stat *s = NULL; > + > + optind = 1; > + for(;;) { > + if (optind >= argc) > + break; > + > + dir = argv[optind++]; > + > + if (dir[0] != '-') { > + hd_found = 1; > + break; > + } > + } > > + if (hd_found) { > + s = malloc(sizeof(*s)); > + > + if (stat(dir, s) < 0) { > + /* Error */ > + fprintf(stderr, "unable to stat: '%s'\n", > + dir); > + exit(1); > + } > + > + if (S_ISDIR(s->st_mode)) { > + /* The user specified a directory, search for ./config */ > + int configlen = strlen(dir); > + configlen += 8; /* "/config\0" */ > + char *config = malloc(sizeof(char) * configlen); > + > + pstrcpy(config, configlen, dir); > + strncat(config, "/config", 7); > + > + int fd_config; > + > + if ((fd_config = open(config, 0)) < 0) { > + /* Error */ > + if (errno == ENOENT) > + fprintf(stderr, "config file not found: '%s'\n", > + config); > + else > + fprintf(stderr, "unable to open config file: '%s'\n", > + config); > + exit(1); > + } > + > + opts = malloc(sizeof(char) * (DIR_CMDLINE_SIZE)); > + > + ssize_t readb = read(fd_config, opts, (DIR_CMDLINE_SIZE) - 1); > + > + opts[readb] = '\0'; > + > + char *filename = strsep(&opts, "\n"); > + > + if (filename == NULL) { > + /* Error */ > + fprintf(stderr, "malformed configuration file: '%s'\n", > + config); > + exit(1); > + } else if (strchr(filename, '/') != NULL) { > + /* Error */ > + fprintf(stderr, "'%s' may point outside folder '%s'\n" > + "avoid using '/' in config file\n", > + filename, dir); > + exit(1); > + } > + > + char tmpopts[DIR_CMDLINE_SIZE]; > + int done = 0; > + unsigned int nbtoks = 0; > + char *tok; > + > + pstrcpy(tmpopts, DIR_CMDLINE_SIZE, opts); > + > + do { > + tok = strtok(nbtoks == 0? tmpopts : NULL, " \n"); > + > + if (tok != NULL) > + nbtoks++; > + else > + done = 1; > + } while (!done); > + > + if (nbtoks > 0) { > + char **argvprime = malloc((nbtoks + argc + 1) * sizeof(char*)); > + > + argvprime[0] = argv[0]; > + > + for (i = 0; i < nbtoks; i++) > + argvprime[i + 1] = strtok(i == 0? opts : NULL, " \n"); > + > + for (i = 1; i < argc; i++) > + argvprime[nbtoks + i] = argv[i]; > + > + argvprime[nbtoks + argc] = dir_file_cat(dir, filename); > + > + argv = argvprime; > + argc = nbtoks + argc + 1; > + > + for (i = 0; i < argc; i++) > + printf("argv[%d] = %s\n", i, argv[i]); > + } > + } > + } > + > + free(s); > +#endif > + > optind = 1; > for(;;) { > if (optind >= argc) > @@ -7773,5 +7907,10 @@ int main(int argc, char **argv) > > main_loop(); > quit_timers(); > + > + /* argv was overwritten when parsing config file */ > + if (hd_found) > + free(argv); > + > return 0; > } > ------------------------------------------------------------------------- > This SF.net email is sponsored by: Splunk Inc. > Still grepping through log files to find problems? Stop. > Now Search log events and configuration files using AJAX and a browser. > Download your FREE copy of Splunk now >> http://get.splunk.com/ > _______________________________________________ kvm-devel mailing list kvm-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/kvm-devel