From: Rocky Bernstein Date: 2010-11-12T12:33:29+09:00 Subject: [ruby-core:33146] [Ruby 1.9-Feature#4046][Open] Saving C's **argv and cwd allows Ruby programs to reliably restart themselves --mimepart_4cdcb534bc723_566a586afe21718 Content-Type: text/plain Content-Transfer-Encoding: Quoted-printable Content-Disposition: inline Feature #4046: Saving C's **argv and cwd allows Ruby programs to reliably= restart themselves http://redmine.ruby-lang.org/issues/show/4046 Author: Rocky Bernstein Status: Open, Priority: Normal Target version: 1.9.x In a debugger often one gets to a state where one just wants to restart e= verything exactly the way the program was previously invoked. = It would helpful if Ruby saved **argv and cwd. = The attached patch saves these in RubyVM::OS_ARGV and RubyVM::OS_STARTUP_= DIR. With this, if a Ruby program wants to restart itself, it can run: chdir RubyVM::OS_STARTUP_DIR exec(*RubyVM::OS_ARGV) ---------------------------------------- http://redmine.ruby-lang.org --mimepart_4cdcb534bc723_566a586afe21718 Content-Type: text/x-patch; name=OS_ARGV_and_STARTUP_DIR.patch Content-Transfer-Encoding: Base64 Content-Disposition: attachment; filename=OS_ARGV_and_STARTUP_DIR.patch SW5kZXg6IGluY2x1ZGUvcnVieS9ydWJ5LmgKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLS0gaW5jbHVkZS9ydWJ5L3J1YnkuaAkocmV2aXNpb24gMjk3Njcp CisrKyBpbmNsdWRlL3J1YnkvcnVieS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x NDU0LDYgKzE0NTQsMTIgQEAKICNpbmNsdWRlICJydWJ5L3N1YnN0LmgiCiAj ZW5kaWYKIAorc3RydWN0IG9yaWdhcmcgeworICAgIGludCBhcmdjOworICAg IGNoYXIgKiphcmd2OworICAgIGNoYXIgKm9zX3N0YXJ0dXBfZGlyOworfTsK KwogI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCiAjaWYgMAogeyAvKiBzYXRp c2Z5IGNjLW1vZGUgKi8KSW5kZXg6IHZtLmMKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLS0gdm0uYwkocmV2aXNpb24gMjk3NjcpCisrKyB2bS5jCSh3b3Jr aW5nIGNvcHkpCkBAIC0xOTc1LDYgKzE5NzUsOCBAQAogICAgIHJldHVybiBh cnk7CiB9CiAKK2V4dGVybiBzdHJ1Y3Qgb3JpZ2FyZyBvcmlnYXJnOworCiB2 b2lkCiBJbml0X1ZNKHZvaWQpCiB7CkBAIC0xOTg3LDYgKzE5OTAsMjEgQEAK ICAgICByYl91bmRlZl9hbGxvY19mdW5jKHJiX2NSdWJ5Vk0pOwogICAgIHJi X3VuZGVmX21ldGhvZChDTEFTU19PRihyYl9jUnVieVZNKSwgIm5ldyIpOwog CisgICAgLyoqIDo6Vk06Ok9TX0FSR1YgYW5kIE9TX1NUQVJUVVBfRElSICov CisgICAgcmJfZGVmaW5lX2NvbnN0KHJiX2NSdWJ5Vk0sICJPU19TVEFSVFVQ X0RJUiIsIAorCQkgICAgc3RybGVuKG9yaWdhcmcub3Nfc3RhcnR1cF9kaXIp ID4gMCA/IAorCQkgICAgcmJfc3RyX25ldzIob3JpZ2FyZy5vc19zdGFydHVw X2RpcikgOiBRbmlsKTsKKyAgICB7CisJaW50IGFyZ2M7CisJY2hhciAqKmFy Z3Y7CisJVkFMVUUgYXJ5ID0gcmJfYXJ5X25ldygpOworCXJiX2RlZmluZV9j b25zdChyYl9jUnVieVZNLCAiT1NfQVJHViIsIGFyeSk7CisJZm9yIChhcmdj ID0gb3JpZ2FyZy5hcmdjLCBhcmd2ID0gb3JpZ2FyZy5hcmd2OyAKKwkgICAg IGFyZ2MgPiAwOyBhcmdjLS0sIGFyZ3YrKykgeworCSAgICByYl9hcnlfcHVz aChhcnksIHJiX3N0cl9uZXcyKCphcmd2KSk7CisJfQorICAgIH0KKwogICAg IC8qIDo6Vk06OkZyb3plbkNvcmUgKi8KICAgICBmY29yZSA9IHJiX2NsYXNz X25ldyhyYl9jQmFzaWNPYmplY3QpOwogICAgIFJCQVNJQyhmY29yZSktPmZs YWdzID0gVF9JQ0xBU1M7CkluZGV4OiBydWJ5LmMKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotLS0gcnVieS5jCShyZXZpc2lvbiAyOTc2NykKKysrIHJ1Ynku Ywkod29ya2luZyBjb3B5KQpAQCAtMTE4LDEzICsxMTgsMTEgQEAKIHN0YXRp YyB2b2lkIGZvcmJpZF9zZXRpZChjb25zdCBjaGFyICosIHN0cnVjdCBjbWRs aW5lX29wdGlvbnMgKik7CiAjZGVmaW5lIGZvcmJpZF9zZXRpZChzKSBmb3Ji aWRfc2V0aWQocywgb3B0KQogCi1zdGF0aWMgc3RydWN0IHsKLSAgICBpbnQg YXJnYzsKLSAgICBjaGFyICoqYXJndjsKK3N0cnVjdCBvcmlnYXJnIG9yaWdh cmc7CisKICNpZiAhZGVmaW5lZChQU1RBVF9TRVRDTUQpICYmICFkZWZpbmVk KEhBVkVfU0VUUFJPQ1RJVExFKQotICAgIHNpemVfdCBsZW47CisgICAgc2l6 ZV90IG9yaWdhcmdfbGVuOwogI2VuZGlmCi19IG9yaWdhcmc7CiAKIHN0YXRp YyB2b2lkCiB1c2FnZShjb25zdCBjaGFyICpuYW1lKQpAQCAtMTc1Miw4ICsx NzUwLDggQEAKICAgICBzZXRwcm9jdGl0bGUoIiUuKnMiLCAoaW50KWksIHMp OwogI2Vsc2UKIAotICAgIGlmICgoc2l6ZV90KWkgPiBvcmlnYXJnLmxlbiAt IG9yaWdhcmcuYXJnYykgewotCWkgPSAobG9uZykob3JpZ2FyZy5sZW4gLSBv cmlnYXJnLmFyZ2MpOworICAgIGlmICgoc2l6ZV90KWkgPiBvcmlnYXJnX2xl biAtIG9yaWdhcmcuYXJnYykgeworCWkgPSAobG9uZykob3JpZ2FyZ19sZW4g LSBvcmlnYXJnLmFyZ2MpOwogICAgIH0KIAogICAgIG1lbWNweShvcmlnYXJn LmFyZ3ZbMF0sIHMsIGkpOwpAQCAtMTc2Myw4ICsxNzYxLDggQEAKIAljaGFy ICp0ID0gb3JpZ2FyZy5hcmd2WzBdICsgaTsKIAkqdCA9ICdcMCc7CiAKLQlp ZiAoKHNpemVfdCkoaSArIDEpIDwgb3JpZ2FyZy5sZW4pIHsKLQkgICAgbWVt c2V0KHQgKyAxLCAnXDAnLCBvcmlnYXJnLmxlbiAtIGkgLSAxKTsKKwlpZiAo KHNpemVfdCkoaSArIDEpIDwgb3JpZ2FyZ19sZW4pIHsKKwkgICAgbWVtc2V0 KHQgKyAxLCAnXDAnLCBvcmlnYXJnX2xlbiAtIGkgLSAxKTsKIAl9CiAJZm9y IChqID0gMTsgaiA8IG9yaWdhcmcuYXJnYzsgaisrKSB7CiAJICAgIG9yaWdh cmcuYXJndltqXSA9IHQ7CkBAIC0xODkxLDggKzE4ODksMTkgQEAKICNlbmRp ZgogICAgIG9yaWdhcmcuYXJnYyA9ICphcmdjOwogICAgIG9yaWdhcmcuYXJn diA9ICphcmd2OworICAgIG9yaWdhcmcub3Nfc3RhcnR1cF9kaXIgPSBtYWxs b2MoTUFYUEFUSExFTik7CisjaWZkZWYgSEFWRV9HRVRDV0QKKyAgICBpZiAo IWdldGN3ZChvcmlnYXJnLm9zX3N0YXJ0dXBfZGlyLCBNQVhQQVRITEVOKSkg CisJb3JpZ2FyZy5vc19zdGFydHVwX2RpclswXSA9ICdcMCc7CisjZWxzZQor ICAgIGlmICghZ2V0d2Qob3JpZ2FyZy5vc19zdGFydHVwX2RpcikpIAorCW9y aWdhcmcub3Nfc3RhcnR1cF9kaXJbMF0gPSAnXDAnOworI2VuZGlmCisgICAg b3JpZ2FyZy5vc19zdGFydHVwX2RpciA9IHJlYWxsb2Mob3JpZ2FyZy5vc19z dGFydHVwX2RpciwgCisJCQkJICAgICBzdHJsZW4ob3JpZ2FyZy5vc19zdGFy dHVwX2RpcikrMSk7CisKICNpZiAhZGVmaW5lZChQU1RBVF9TRVRDTUQpICYm ICFkZWZpbmVkKEhBVkVfU0VUUFJPQ1RJVExFKQotICAgIG9yaWdhcmcubGVu ID0gZ2V0X2FyZ2xlbihvcmlnYXJnLmFyZ2MsIG9yaWdhcmcuYXJndik7Cisg ICAgb3JpZ2FyZ19sZW4gPSBnZXRfYXJnbGVuKG9yaWdhcmcuYXJnYywgb3Jp Z2FyZy5hcmd2KTsKICNlbmRpZgogI2lmIGRlZmluZWQoVVNFX0RMTl9BX09V VCkKICAgICBkbG5fYXJndjAgPSBvcmlnYXJnLmFyZ3ZbMF07Cg== --mimepart_4cdcb534bc723_566a586afe21718--