From: "NARUSE, Yui" Date: 2008-06-04T08:08:54+09:00 Subject: [ruby-dev:34923] open() and encodings This is a multi-part message in MIME format. --------------060009060504020004080200 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit 成瀬です。 Dir.open/entries に関連して、open() 絡みの変更案です。 まず、ファイルパスについて、現在はファイルシステムのエンコーディングに関らず、 与えられたバイナリ列をそのままOSに渡していますが、 ファイルシステムのエンコーディングに変換した上で渡した方が親切でしょう。 次に、現在open()はエンコーディングを別にオプションで取ることができません。 これも open("filename", internal_encoding:"EUC-JP", external_encoding:"Shift_JIS") などと取れたほうが便利ではないでしょうか。 なお、キー名はとりあえずそのまんま長めの名前にしています。 これならば誤解はないであろうし、後でもっと良い名前を思いついたときに変えやすいと思ったので。 このような感じでいかがでしょうか。 -- NARUSE, Yui --------------060009060504020004080200 Content-Type: text/plain; name="open_and_encoding.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="open_and_encoding.patch" LS0tIGRpci5jCShyZXZpc2lvbiAxNjc5OSkKKysrIGRpci5jCSh3b3JraW5nIGNvcHkpCkBA IC0xMiw2ICsxMiw3IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaW5jbHVkZSAicnVieS9y dWJ5LmgiCisjaW5jbHVkZSAicnVieS9lbmNvZGluZy5oIgogCiAjaW5jbHVkZSA8c3lzL3R5 cGVzLmg+CiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KQEAgLTM0Miw2ICszNDMsOCBAQCBWQUxV RSByYl9jRGlyOwogc3RydWN0IGRpcl9kYXRhIHsKICAgICBESVIgKmRpcjsKICAgICBjaGFy ICpwYXRoOworICAgIHJiX2VuY29kaW5nICppbnRlbmM7CisgICAgcmJfZW5jb2RpbmcgKmV4 dGVuYzsKIH07CiAKIHN0YXRpYyB2b2lkCkBAIC0zNjQsNiArMzY3LDggQEAgZGlyX3NfYWxs b2MoVkFMVUUga2xhc3MpCiAKICAgICBkaXJwLT5kaXIgPSBOVUxMOwogICAgIGRpcnAtPnBh dGggPSBOVUxMOworICAgIGRpcnAtPmludGVuYyA9IE5VTEw7CisgICAgZGlycC0+ZXh0ZW5j ID0gTlVMTDsKIAogICAgIHJldHVybiBvYmo7CiB9CkBAIC0zNzUsMTYgKzM4MCw1MiBAQCBk aXJfc19hbGxvYyhWQUxVRSBrbGFzcykKICAqICBSZXR1cm5zIGEgbmV3IGRpcmVjdG9yeSBv YmplY3QgZm9yIHRoZSBuYW1lZCBkaXJlY3RvcnkuCiAgKi8KIHN0YXRpYyBWQUxVRQotZGly X2luaXRpYWxpemUoVkFMVUUgZGlyLCBWQUxVRSBkaXJuYW1lKQorZGlyX2luaXRpYWxpemUo aW50IGFyZ2MsIFZBTFVFICphcmd2LCBWQUxVRSBkaXIpCiB7CiAgICAgc3RydWN0IGRpcl9k YXRhICpkcDsKLQorICAgIHN0YXRpYyByYl9lbmNvZGluZyAqZnNfZW5jOworICAgIHJiX2Vu Y29kaW5nICAqZGlybmFtZV9lbmMsICppbnRlbmMsICpleHRlbmM7CisgICAgVkFMVUUgZGly bmFtZSwgb3B0OworICAgIHN0YXRpYyBWQUxVRSBzeW1faW50ZW5jLCBzeW1fZXh0ZW5jOwor CisgICAgaWYgKCFzeW1faW50ZW5jKSB7CisJc3ltX2ludGVuYyA9IElEMlNZTShyYl9pbnRl cm4oImludGVybmFsX2VuY29kaW5nIikpOworCXN5bV9leHRlbmMgPSBJRDJTWU0ocmJfaW50 ZXJuKCJleHRlcm5hbF9lbmNvZGluZyIpKTsKKwlmc19lbmMgPSByYl9maWxlc3lzdGVtX2Vu Y29kaW5nKCk7CisgICAgfQorCisgICAgaW50ZW5jID0gTlVMTDsKKyAgICBleHRlbmMgPSBm c19lbmM7CisgICAgcmJfc2Nhbl9hcmdzKGFyZ2MsIGFyZ3YsICIxMSIsICZkaXJuYW1lLCAm b3B0KTsKKyAgICBpZiAoIU5JTF9QKG9wdCkpIHsKKyAgICAgICAgVkFMVUUgdjsKKyAgICAg ICAgb3B0ID0gcmJfY2hlY2tfY29udmVydF90eXBlKG9wdCwgVF9IQVNILCAiSGFzaCIsICJ0 b19oYXNoIik7CisgICAgICAgIHYgPSByYl9oYXNoX2FyZWYob3B0LCBzeW1faW50ZW5jKTsK KyAgICAgICAgaWYgKCFOSUxfUCh2KSkgaW50ZW5jID0gcmJfdG9fZW5jb2Rpbmcodik7Cisg ICAgICAgIHYgPSByYl9oYXNoX2FyZWYob3B0LCBzeW1fZXh0ZW5jKTsKKyAgICAgICAgaWYg KCFOSUxfUCh2KSkgZXh0ZW5jID0gcmJfdG9fZW5jb2Rpbmcodik7CisgICAgfQorCisgICAg ZGlybmFtZV9lbmMgPSByYl9lbmNfZ2V0KGRpcm5hbWUpOworICAgIGlmIChpbnRlbmMpOwor ICAgIGVsc2UgaWYgKHJiX3VzYXNjaWlfZW5jb2RpbmcoKSA9PSBkaXJuYW1lX2VuYworICAg ICAgICAgICAgfHwgcmJfYXNjaWk4Yml0X2VuY29kaW5nKCkgPT0gZGlybmFtZV9lbmMKKyAg ICAgICAgICAgIHx8IGV4dGVuYyA9PSBkaXJuYW1lX2VuYykgeworICAgICAgICBpbnRlbmMg PSBOVUxMOworICAgIH0KKyAgICBlbHNlIHsKKwlpbnRlbmMgPSBkaXJuYW1lX2VuYzsKKyAg ICAgICAgZGlybmFtZSA9IHJiX3N0cl90cmFuc2NvZGUoZGlybmFtZSwgcmJfZW5jX2Zyb21f ZW5jb2RpbmcoZXh0ZW5jKSk7CisgICAgfQogICAgIEZpbGVQYXRoVmFsdWUoZGlybmFtZSk7 CisKICAgICBEYXRhX0dldF9TdHJ1Y3QoZGlyLCBzdHJ1Y3QgZGlyX2RhdGEsIGRwKTsKICAg ICBpZiAoZHAtPmRpcikgY2xvc2VkaXIoZHAtPmRpcik7CiAgICAgaWYgKGRwLT5wYXRoKSBm cmVlKGRwLT5wYXRoKTsKICAgICBkcC0+ZGlyID0gTlVMTDsKICAgICBkcC0+cGF0aCA9IE5V TEw7CisgICAgZHAtPmludGVuYyA9IGludGVuYzsKKyAgICBkcC0+ZXh0ZW5jID0gZXh0ZW5j OwogICAgIGRwLT5kaXIgPSBvcGVuZGlyKFJTVFJJTkdfUFRSKGRpcm5hbWUpKTsKICAgICBp ZiAoZHAtPmRpciA9PSBOVUxMKSB7CiAJaWYgKGVycm5vID09IEVNRklMRSB8fCBlcnJubyA9 PSBFTkZJTEUpIHsKQEAgLTQxMiwxMiArNDUzLDEyIEBAIGRpcl9pbml0aWFsaXplKFZBTFVF IGRpciwgVkFMVUUgZGlybmFtZSkKICAqICBibG9jay4KICAqLwogc3RhdGljIFZBTFVFCi1k aXJfc19vcGVuKFZBTFVFIGtsYXNzLCBWQUxVRSBkaXJuYW1lKQorZGlyX3Nfb3BlbihpbnQg YXJnYywgVkFMVUUgKmFyZ3YsIFZBTFVFIGtsYXNzKQogewogICAgIHN0cnVjdCBkaXJfZGF0 YSAqZHA7CiAgICAgVkFMVUUgZGlyID0gRGF0YV9NYWtlX1N0cnVjdChrbGFzcywgc3RydWN0 IGRpcl9kYXRhLCAwLCBmcmVlX2RpciwgZHApOwogCi0gICAgZGlyX2luaXRpYWxpemUoZGly LCBkaXJuYW1lKTsKKyAgICBkaXJfaW5pdGlhbGl6ZShhcmdjLCBhcmd2LCBkaXIpOwogICAg IGlmIChyYl9ibG9ja19naXZlbl9wKCkpIHsKIAlyZXR1cm4gcmJfZW5zdXJlKHJiX3lpZWxk LCBkaXIsIGRpcl9jbG9zZSwgZGlyKTsKICAgICB9CkBAIC00NDUsNiArNDg2LDE2IEBAIGRp cl9jaGVjayhWQUxVRSBkaXIpCiAgICAgaWYgKGRpcnAtPmRpciA9PSBOVUxMKSBkaXJfY2xv c2VkKCk7XAogfSB3aGlsZSAoMCkKIAorc3RhdGljIFZBTFVFCitkaXJfZW5jX3N0cihWQUxV RSBzdHIsIHN0cnVjdCBkaXJfZGF0YSAqZGlycCkKK3sKKyAgICByYl9lbmNfYXNzb2NpYXRl KHN0ciwgZGlycC0+ZXh0ZW5jKTsKKyAgICBpZiAoZGlycC0+aW50ZW5jKSB7CisgICAgICAg IHN0ciA9IHJiX3N0cl90cmFuc2NvZGUoc3RyLCByYl9lbmNfZnJvbV9lbmNvZGluZyhkaXJw LT5pbnRlbmMpKTsKKyAgICB9CisgICAgcmV0dXJuIHN0cjsKK30KKwogLyoKICAqICBjYWxs LXNlcToKICAqICAgICBkaXIuaW5zcGVjdCA9PiBzdHJpbmcKQEAgLTQ4Myw3ICs1MzQsNyBA QCBkaXJfcGF0aChWQUxVRSBkaXIpCiAKICAgICBEYXRhX0dldF9TdHJ1Y3QoZGlyLCBzdHJ1 Y3QgZGlyX2RhdGEsIGRpcnApOwogICAgIGlmICghZGlycC0+cGF0aCkgcmV0dXJuIFFuaWw7 Ci0gICAgcmV0dXJuIHJiX3N0cl9uZXcyKGRpcnAtPnBhdGgpOworICAgIHJldHVybiBkaXJf ZW5jX3N0cihyYl9zdHJfbmV3MihkaXJwLT5wYXRoKSwgZGlycCk7CiB9CiAKIC8qCkBAIC01 MDgsNyArNTU5LDcgQEAgZGlyX3JlYWQoVkFMVUUgZGlyKQogICAgIGVycm5vID0gMDsKICAg ICBkcCA9IHJlYWRkaXIoZGlycC0+ZGlyKTsKICAgICBpZiAoZHApIHsKLQlyZXR1cm4gcmJf dGFpbnRlZF9zdHJfbmV3KGRwLT5kX25hbWUsIE5BTUxFTihkcCkpOworCXJldHVybiBkaXJf ZW5jX3N0cihyYl90YWludGVkX3N0cl9uZXcoZHAtPmRfbmFtZSwgTkFNTEVOKGRwKSksIGRp cnApOwogICAgIH0KICAgICBlbHNlIGlmIChlcnJubyA9PSAwKSB7CS8qIGVuZCBvZiBzdHJl YW0gKi8KIAlyZXR1cm4gUW5pbDsKQEAgLTU0Niw3ICs1OTcsNyBAQCBkaXJfZWFjaChWQUxV RSBkaXIpCiAgICAgR2V0RElSKGRpciwgZGlycCk7CiAgICAgcmV3aW5kZGlyKGRpcnAtPmRp cik7CiAgICAgZm9yIChkcCA9IHJlYWRkaXIoZGlycC0+ZGlyKTsgZHAgIT0gTlVMTDsgZHAg PSByZWFkZGlyKGRpcnAtPmRpcikpIHsKLQlyYl95aWVsZChyYl90YWludGVkX3N0cl9uZXco ZHAtPmRfbmFtZSwgTkFNTEVOKGRwKSkpOworCXJiX3lpZWxkKGRpcl9lbmNfc3RyKHJiX3Rh aW50ZWRfc3RyX25ldyhkcC0+ZF9uYW1lLCBOQU1MRU4oZHApKSwgZGlycCkpOwogCWlmIChk aXJwLT5kaXIgPT0gTlVMTCkgZGlyX2Nsb3NlZCgpOwogICAgIH0KICAgICByZXR1cm4gZGly OwpAQCAtMTY4NSw5ICsxNzM2LDkgQEAgZGlyX3NfZ2xvYihpbnQgYXJnYywgVkFMVUUgKmFy Z3YsIFZBTFVFIAogfQogCiBzdGF0aWMgVkFMVUUKLWRpcl9vcGVuX2RpcihWQUxVRSBwYXRo KQorZGlyX29wZW5fZGlyKGludCBhcmdjLCBWQUxVRSAqYXJndikKIHsKLSAgICBWQUxVRSBk aXIgPSByYl9mdW5jYWxsKHJiX2NEaXIsIHJiX2ludGVybigib3BlbiIpLCAxLCBwYXRoKTsK KyAgICBWQUxVRSBkaXIgPSByYl9mdW5jYWxsMihyYl9jRGlyLCByYl9pbnRlcm4oIm9wZW4i KSwgYXJnYywgYXJndik7CiAKICAgICBpZiAoVFlQRShkaXIpICE9IFRfREFUQSB8fAogCVJE QVRBKGRpciktPmRmcmVlICE9IChSVUJZX0RBVEFfRlVOQylmcmVlX2RpcikgewpAQCAtMTcx NiwxMiArMTc2NywxMiBAQCBkaXJfb3Blbl9kaXIoVkFMVUUgcGF0aCkKICAqCiAgKi8KIHN0 YXRpYyBWQUxVRQotZGlyX2ZvcmVhY2goVkFMVUUgaW8sIFZBTFVFIGRpcm5hbWUpCitkaXJf Zm9yZWFjaChpbnQgYXJnYywgVkFMVUUgKmFyZ3YsIFZBTFVFIGlvKQogewogICAgIFZBTFVF IGRpcjsKIAotICAgIFJFVFVSTl9FTlVNRVJBVE9SKGlvLCAxLCAmZGlybmFtZSk7Ci0gICAg ZGlyID0gZGlyX29wZW5fZGlyKGRpcm5hbWUpOworICAgIFJFVFVSTl9FTlVNRVJBVE9SKGlv LCBhcmdjLCBhcmd2KTsKKyAgICBkaXIgPSBkaXJfb3Blbl9kaXIoYXJnYywgYXJndik7CiAg ICAgcmJfZW5zdXJlKGRpcl9lYWNoLCBkaXIsIGRpcl9jbG9zZSwgZGlyKTsKICAgICByZXR1 cm4gUW5pbDsKIH0KQEAgLTE3MzgsMTEgKzE3ODksMTEgQEAgZGlyX2ZvcmVhY2goVkFMVUUg aW8sIFZBTFVFIGRpcm5hbWUpCiAgKgogICovCiBzdGF0aWMgVkFMVUUKLWRpcl9lbnRyaWVz KFZBTFVFIGlvLCBWQUxVRSBkaXJuYW1lKQorZGlyX2VudHJpZXMoaW50IGFyZ2MsIFZBTFVF ICphcmd2LCBWQUxVRSBpbykKIHsKICAgICBWQUxVRSBkaXI7CiAKLSAgICBkaXIgPSBkaXJf b3Blbl9kaXIoZGlybmFtZSk7CisgICAgZGlyID0gZGlyX29wZW5fZGlyKGFyZ2MsIGFyZ3Yp OwogICAgIHJldHVybiByYl9lbnN1cmUocmJfQXJyYXksIGRpciwgZGlyX2Nsb3NlLCBkaXIp OwogfQogCkBAIC0xODY3LDExICsxOTE4LDExIEBAIEluaXRfRGlyKHZvaWQpCiAgICAgcmJf aW5jbHVkZV9tb2R1bGUocmJfY0RpciwgcmJfbUVudW1lcmFibGUpOwogCiAgICAgcmJfZGVm aW5lX2FsbG9jX2Z1bmMocmJfY0RpciwgZGlyX3NfYWxsb2MpOwotICAgIHJiX2RlZmluZV9z aW5nbGV0b25fbWV0aG9kKHJiX2NEaXIsICJvcGVuIiwgZGlyX3Nfb3BlbiwgMSk7CisgICAg cmJfZGVmaW5lX3NpbmdsZXRvbl9tZXRob2QocmJfY0RpciwgIm9wZW4iLCBkaXJfc19vcGVu LCAtMSk7CiAgICAgcmJfZGVmaW5lX3NpbmdsZXRvbl9tZXRob2QocmJfY0RpciwgImZvcmVh Y2giLCBkaXJfZm9yZWFjaCwgMSk7Ci0gICAgcmJfZGVmaW5lX3NpbmdsZXRvbl9tZXRob2Qo cmJfY0RpciwgImVudHJpZXMiLCBkaXJfZW50cmllcywgMSk7CisgICAgcmJfZGVmaW5lX3Np bmdsZXRvbl9tZXRob2QocmJfY0RpciwgImVudHJpZXMiLCBkaXJfZW50cmllcywgLTEpOwog Ci0gICAgcmJfZGVmaW5lX21ldGhvZChyYl9jRGlyLCJpbml0aWFsaXplIiwgZGlyX2luaXRp YWxpemUsIDEpOworICAgIHJiX2RlZmluZV9tZXRob2QocmJfY0RpciwiaW5pdGlhbGl6ZSIs IGRpcl9pbml0aWFsaXplLCAtMSk7CiAgICAgcmJfZGVmaW5lX21ldGhvZChyYl9jRGlyLCJw YXRoIiwgZGlyX3BhdGgsIDApOwogICAgIHJiX2RlZmluZV9tZXRob2QocmJfY0RpciwiaW5z cGVjdCIsIGRpcl9pbnNwZWN0LCAwKTsKICAgICByYl9kZWZpbmVfbWV0aG9kKHJiX2NEaXIs InJlYWQiLCBkaXJfcmVhZCwgMCk7Ci0tLSBlbmNvZGluZy5jCShyZXZpc2lvbiAxNjc5OSkK KysrIGVuY29kaW5nLmMJKHdvcmtpbmcgY29weSkKQEAgLTk2NCw2ICs5NjQsMjMgQEAgcmJf bG9jYWxlX2VuY29kaW5nKHZvaWQpCiAgICAgcmV0dXJuIHJiX2VuY19mcm9tX2luZGV4KGlk eCk7CiB9CiAKK3JiX2VuY29kaW5nICoKK3JiX2ZpbGVzeXN0ZW1fZW5jb2Rpbmcodm9pZCkK K3sKKyAgICBzdGF0aWMgcmJfZW5jb2RpbmcgKmVuYzsKKyAgICBpZiAoIWVuYykgeworI2lm IGRlZmluZWQgX19BUFBMRV9fCisJZW5jID0gcmJfZW5jX2ZpbmQoIlVURjgtTUFDIik7Cisj ZWxpZiBkZWZpbmVkIF9XSU4zMgorICAgICAgICAvKiBzaXRsbCB1c2UgQU5TSSBlbmNvZGlu ZyAqLworCWVuYyA9IHJiX2xvY2FsZV9lbmNvZGluZygpOworI2Vsc2UKKwllbmMgPSByYl9s b2NhbGVfZW5jb2RpbmcoKTsKKyNlbmRpZgorICAgIH0KKyAgICByZXR1cm4gZW5jOworfQor CiBzdGF0aWMgaW50IGRlZmF1bHRfZXh0ZXJuYWxfaW5kZXg7CiAKIHJiX2VuY29kaW5nICoK LS0tIGluY2x1ZGUvcnVieS9lbmNvZGluZy5oCShyZXZpc2lvbiAxNjc5OSkKKysrIGluY2x1 ZGUvcnVieS9lbmNvZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjksNiArMTY5LDcgQEAg cmJfZW5jb2RpbmcgKnJiX2FzY2lpOGJpdF9lbmNvZGluZyh2b2lkKQogcmJfZW5jb2Rpbmcg KnJiX3V0ZjhfZW5jb2Rpbmcodm9pZCk7CiByYl9lbmNvZGluZyAqcmJfdXNhc2NpaV9lbmNv ZGluZyh2b2lkKTsKIHJiX2VuY29kaW5nICpyYl9sb2NhbGVfZW5jb2Rpbmcodm9pZCk7City Yl9lbmNvZGluZyAqcmJfZmlsZXN5c3RlbV9lbmNvZGluZyh2b2lkKTsKIHJiX2VuY29kaW5n ICpyYl9kZWZhdWx0X2V4dGVybmFsX2VuY29kaW5nKHZvaWQpOwogaW50IHJiX3VzYXNjaWlf ZW5jaW5kZXgodm9pZCk7CiBpbnQgcmJfYXNjaWk4Yml0X2VuY2luZGV4KHZvaWQpOwotLS0g aW8uYwkocmV2aXNpb24gMTY3OTkpCisrKyBpby5jCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUs NiArMTI1LDcgQEAgVkFMVUUgcmJfZGVmYXVsdF9yczsKIHN0YXRpYyBWQUxVRSBhcmdmOwog CiBzdGF0aWMgSUQgaWRfd3JpdGUsIGlkX3JlYWQsIGlkX2dldGMsIGlkX2ZsdXNoLCBpZF9l bmNvZGUsIGlkX3JlYWRwYXJ0aWFsOworc3RhdGljIFZBTFVFIHN5bV9tb2RlLCBzeW1fcGVy bSwgc3ltX2V4dGVuYywgc3ltX2ludGVuYywgc3ltX2VuY29kaW5nLCBzeW1fb3Blbl9hcmdz OwogCiBzdHJ1Y3QgdGltZXZhbCByYl90aW1lX2ludGVydmFsKFZBTFVFKTsKIApAQCAtNDAx NSwxMSArNDAxNiwzNCBAQCByYl9pb19zX3BvcGVuKGludCBhcmdjLCBWQUxVRSAqYXJndiwg VkFMCiBzdGF0aWMgVkFMVUUKIHJiX29wZW5fZmlsZShpbnQgYXJnYywgVkFMVUUgKmFyZ3Ys IFZBTFVFIGlvKQogewotICAgIFZBTFVFIGZuYW1lLCB2bW9kZSwgcGVybTsKKyAgICBWQUxV RSBmbmFtZSwgdm1vZGUsIHBlcm0sIGV4dGVuYz1RbmlsLCBpbnRlbmM9UW5pbCwgb3B0Owog ICAgIGNvbnN0IGNoYXIgKm1vZGU7CiAgICAgaW50IGZsYWdzLCBmbW9kZTsKKyAgICByYl9l bmNvZGluZyAqZm5hbWVfZW5jOworCisgICAgb3B0ID0gcmJfY2hlY2tfY29udmVydF90eXBl KGFyZ3ZbYXJnYy0xXSwgVF9IQVNILCAiSGFzaCIsICJ0b19oYXNoIik7CisgICAgaWYgKCFO SUxfUChvcHQpKSB7CisJVkFMVUUgdjsKKwl2ID0gcmJfaGFzaF9hcmVmKG9wdCwgc3ltX21v ZGUpOworCWlmICghTklMX1AodikpIHZtb2RlID0gdjsKKwl2ID0gcmJfaGFzaF9hcmVmKG9w dCwgc3ltX3Blcm0pOworCWlmICghTklMX1AodikpIHBlcm0gPSB2OworCXYgPSByYl9oYXNo X2FyZWYob3B0LCBzeW1fZXh0ZW5jKTsKKwlpZiAoIU5JTF9QKHYpKSBleHRlbmMgPSB2Owor CXYgPSByYl9oYXNoX2FyZWYob3B0LCBzeW1faW50ZW5jKTsKKwlpZiAoIU5JTF9QKHYpKSBp bnRlbmMgPSB2OworCWFyZ2MgLT0gMTsKKyAgICB9CiAKICAgICByYl9zY2FuX2FyZ3MoYXJn YywgYXJndiwgIjEyIiwgJmZuYW1lLCAmdm1vZGUsICZwZXJtKTsKKyAgICBmbmFtZV9lbmMg PSByYl9lbmNfZ2V0KGZuYW1lKTsKKyAgICBpZiAocmJfdXNhc2NpaV9lbmNvZGluZygpID09 IGZuYW1lX2VuYworCXx8IHJiX2FzY2lpOGJpdF9lbmNvZGluZygpID09IGZuYW1lX2VuYwor ICAgICAgICB8fCByYl9maWxlc3lzdGVtX2VuY29kaW5nKCkgPT0gZm5hbWVfZW5jKSB7Cisg ICAgfQorICAgIGVsc2UgeworCWZuYW1lID0gcmJfc3RyX3RyYW5zY29kZShmbmFtZSwgcmJf ZW5jX2Zyb21fZW5jb2RpbmcocmJfZmlsZXN5c3RlbV9lbmNvZGluZygpKSk7CisgICAgfQog ICAgIEZpbGVQYXRoVmFsdWUoZm5hbWUpOwogCiAgICAgaWYgKEZJWE5VTV9QKHZtb2RlKSB8 fCAhTklMX1AocGVybSkpIHsKQEAgLTQwMzUsMTAgKzQwNTksMTYgQEAgcmJfb3Blbl9maWxl KGludCBhcmdjLCBWQUxVRSAqYXJndiwgVkFMVQogCXJiX2ZpbGVfc3lzb3Blbl9pbnRlcm5h bChpbywgUlNUUklOR19QVFIoZm5hbWUpLCBmbGFncywgZm1vZGUpOwogICAgIH0KICAgICBl bHNlIHsKLQogCW1vZGUgPSBOSUxfUCh2bW9kZSkgPyAiciIgOiBTdHJpbmdWYWx1ZUNTdHIo dm1vZGUpOwogCXJiX2ZpbGVfb3Blbl9pbnRlcm5hbChpbywgUlNUUklOR19QVFIoZm5hbWUp LCBtb2RlKTsKICAgICB9CisKKyAgICBpZiAoIU5JTF9QKGV4dGVuYykpIHsKKwlyYl9pb190 ICpmcHRyOworCUdldE9wZW5GaWxlKGlvLCBmcHRyKTsKKwlmcHRyLT5lbmMgPSByYl90b19l bmNvZGluZyhleHRlbmMpOworCWlmICghTklMX1AoaW50ZW5jKSkgZnB0ci0+ZW5jMiA9IHJi X3RvX2VuY29kaW5nKGludGVuYyk7CisgICAgfQogICAgIHJldHVybiBpbzsKIH0KIApAQCAt NjE0NSw3ICs2MTc1LDYgQEAgc3RhdGljIHZvaWQKIG9wZW5fa2V5X2FyZ3MoaW50IGFyZ2Ms IFZBTFVFICphcmd2LCBzdHJ1Y3QgZm9yZWFjaF9hcmcgKmFyZykKIHsKICAgICBWQUxVRSBv cHQsIHY7Ci0gICAgc3RhdGljIFZBTFVFIGVuY29kaW5nLCBtb2RlLCBvcGVuX2FyZ3M7CiAK ICAgICBGaWxlUGF0aFZhbHVlKGFyZ3ZbMF0pOwogICAgIGFyZy0+aW8gPSAwOwpAQCAtNjE2 MCwxNyArNjE4OSw4IEBAIG9wZW5fa2V5X2FyZ3MoaW50IGFyZ2MsIFZBTFVFICphcmd2LCBz dHIKICAgICBpZiAoTklMX1Aob3B0KSkgZ290byBub19rZXk7CiAgICAgaWYgKGFyZ2MgPiAy KSBhcmctPmFyZ2MgPSAxOwogICAgIGVsc2UgYXJnLT5hcmdjID0gMDsKLSAgICBpZiAoIWVu Y29kaW5nKSB7Ci0JSUQgaWQ7CiAKLQlpZCA9IHJiX2ludGVybigiZW5jb2RpbmciKTsKLQll bmNvZGluZyA9IElEMlNZTShpZCk7Ci0JaWQgPSByYl9pbnRlcm4oIm1vZGUiKTsKLQltb2Rl ID0gSUQyU1lNKGlkKTsKLQlpZCA9IHJiX2ludGVybigib3Blbl9hcmdzIik7Ci0Jb3Blbl9h cmdzID0gSUQyU1lNKGlkKTsKLSAgICB9Ci0gICAgdiA9IHJiX2hhc2hfYXJlZihvcHQsIG9w ZW5fYXJncyk7CisgICAgdiA9IHJiX2hhc2hfYXJlZihvcHQsIHN5bV9vcGVuX2FyZ3MpOwog ICAgIGlmICghTklMX1AodikpIHsKIAlWQUxVRSBhcmdzOwogCkBAIC02MTgzLDcgKzYyMDMs NyBAQCBvcGVuX2tleV9hcmdzKGludCBhcmdjLCBWQUxVRSAqYXJndiwgc3RyCiAJYXJnLT5p byA9IHJiX2lvX29wZW5fd2l0aF9hcmdzKFJBUlJBWV9MRU4oYXJncyksIFJBUlJBWV9QVFIo YXJncykpOwogCXJldHVybjsKICAgICB9Ci0gICAgdiA9IHJiX2hhc2hfYXJlZihvcHQsIG1v ZGUpOworICAgIHYgPSByYl9oYXNoX2FyZWYob3B0LCBzeW1fbW9kZSk7CiAgICAgaWYgKCFO SUxfUCh2KSkgewogCWFyZy0+aW8gPSByYl9pb19vcGVuKFJTVFJJTkdfUFRSKGFyZ3ZbMF0p LCBTdHJpbmdWYWx1ZUNTdHIodikpOwogICAgIH0KQEAgLTYxOTEsNyArNjIxMSw3IEBAIG9w ZW5fa2V5X2FyZ3MoaW50IGFyZ2MsIFZBTFVFICphcmd2LCBzdHIKIAlhcmctPmlvID0gcmJf aW9fb3BlbihSU1RSSU5HX1BUUihhcmd2WzBdKSwgInIiKTsKICAgICB9CiAKLSAgICB2ID0g cmJfaGFzaF9hcmVmKG9wdCwgZW5jb2RpbmcpOworICAgIHYgPSByYl9oYXNoX2FyZWYob3B0 LCBzeW1fZW5jb2RpbmcpOwogICAgIGlmICghTklMX1AodikpIHsKIAlyYl9pb190ICpmcHRy OwogCUdldE9wZW5GaWxlKGFyZy0+aW8sIGZwdHIpOwpAQCAtNzc0MCw0ICs3NzYwLDExIEBA IEluaXRfSU8odm9pZCkKICNpZmRlZiBPX1NZTkMKICAgICByYl9maWxlX2NvbnN0KCJTWU5D IiwgSU5UMkZJWChPX1NZTkMpKTsKICNlbmRpZgorCisgICAgc3ltX21vZGUgPSBJRDJTWU0o cmJfaW50ZXJuKCJtb2RlIikpOworICAgIHN5bV9wZXJtID0gSUQyU1lNKHJiX2ludGVybigi cGVybSIpKTsKKyAgICBzeW1fZXh0ZW5jID0gSUQyU1lNKHJiX2ludGVybigiZXh0ZXJuYWxf ZW5jb2RpbmciKSk7CisgICAgc3ltX2ludGVuYyA9IElEMlNZTShyYl9pbnRlcm4oImludGVy bmFsX2VuY29kaW5nIikpOworICAgIHN5bV9lbmNvZGluZyA9IElEMlNZTShyYl9pbnRlcm4o ImVuY29kaW5nIikpOworICAgIHN5bV9vcGVuX2FyZ3MgPSBJRDJTWU0ocmJfaW50ZXJuKCJv cGVuX2FyZ3MiKSk7CiB9Cg== --------------060009060504020004080200--