From: "NARUSE, Yui" Date: 2008-05-24T08:40:24+09:00 Subject: [ruby-dev:34836] Dir.entriesのエンコーディング This is a multi-part message in MIME format. --------------050000020705040204070007 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit 成瀬です。 [ruby-list:44877] から ruby-dev に移動します。 やっと以前出た仕様の案を一通り実装できました。 こんな感じでどうでしょう。 * Dir.open, Dir.foreach, Dir.entries にオプションのハッシュを渡せるようになった。 * :external_encoding でファイルシステムのエンコーディングを指定する。 デフォルトは rb_locale_encoding()。 * :internal_encoding で受け取るリストのエンコーディングを指定する。 デフォルトは dirname のエンコーディング。 但し、dirname のエンコーディングが US-ASCII または ASCII-8BIT の場合は変換しない -- NARUSE, Yui --------------050000020705040204070007 Content-Type: text/plain; name="dir_entries.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="dir_entries.patch" LS0tIGRpci5jCShyZXZpc2lvbiAxNjU2MikKKysrIGRpci5jCSh3b3JraW5nIGNvcHkpCkBA IC0xMiw2ICsxMiw3IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaW5jbHVkZSAicnVieS9y dWJ5LmgiCisjaW5jbHVkZSAicnVieS9lbmNvZGluZy5oIgogCiAjaW5jbHVkZSA8c3lzL3R5 cGVzLmg+CiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KQEAgLTM0Miw2ICszNDMsOCBAQCBWQUxV RSByYl9jRGlyOwogc3RydWN0IGRpcl9kYXRhIHsKICAgICBESVIgKmRpcjsKICAgICBjaGFy ICpwYXRoOworICAgIHJiX2VuY29kaW5nICppbnRlbmM7CisgICAgcmJfZW5jb2RpbmcgKmV4 dGVuYzsKIH07CiAKIHN0YXRpYyB2b2lkCkBAIC0zNjQsNiArMzY3LDggQEAgZGlyX3NfYWxs b2MoVkFMVUUga2xhc3MpCiAKICAgICBkaXJwLT5kaXIgPSBOVUxMOwogICAgIGRpcnAtPnBh dGggPSBOVUxMOworICAgIGRpcnAtPmludGVuYyA9IE5VTEw7CisgICAgZGlycC0+ZXh0ZW5j ID0gTlVMTDsKIAogICAgIHJldHVybiBvYmo7CiB9CkBAIC0zNzUsMTYgKzM4MCw1MiBAQCBk aXJfc19hbGxvYyhWQUxVRSBrbGFzcykKICAqICBSZXR1cm5zIGEgbmV3IGRpcmVjdG9yeSBv YmplY3QgZm9yIHRoZSBuYW1lZCBkaXJlY3RvcnkuCiAgKi8KIHN0YXRpYyBWQUxVRQotZGly X2luaXRpYWxpemUoVkFMVUUgZGlyLCBWQUxVRSBkaXJuYW1lKQorZGlyX2luaXRpYWxpemUo aW50IGFyZ2MsIFZBTFVFICphcmd2LCBWQUxVRSBkaXIpCiB7CiAgICAgc3RydWN0IGRpcl9k YXRhICpkcDsKLQorICAgIHN0YXRpYyByYl9lbmNvZGluZyAqZnNfZW5jOworICAgIHJiX2Vu Y29kaW5nICAqZGlybmFtZV9lbmMsICppbnRlbmMsICpleHRlbmM7CisgICAgVkFMVUUgZGly bmFtZSwgb3B0OworICAgIHN0YXRpYyBWQUxVRSBzeW1faW50ZW5jLCBzeW1fZXh0ZW5jOwor CisgICAgaWYgKCFzeW1faW50ZW5jKSB7CisJc3ltX2ludGVuYyA9IElEMlNZTShyYl9pbnRl cm4oImludGVybmFsX2VuY29kaW5nIikpOworCXN5bV9leHRlbmMgPSBJRDJTWU0ocmJfaW50 ZXJuKCJleHRlcm5hbF9lbmNvZGluZyIpKTsKKwlmc19lbmMgPSByYl9sb2NhbGVfZW5jb2Rp bmcoKTsKKyAgICB9CisKKyAgICBpbnRlbmMgPSBOVUxMOworICAgIGV4dGVuYyA9IGZzX2Vu YzsKKyAgICByYl9zY2FuX2FyZ3MoYXJnYywgYXJndiwgIjExIiwgJmRpcm5hbWUsICZvcHQp OworICAgIGlmICghTklMX1Aob3B0KSkgeworICAgICAgICBWQUxVRSB2OworICAgICAgICBv cHQgPSByYl9jaGVja19jb252ZXJ0X3R5cGUob3B0LCBUX0hBU0gsICJIYXNoIiwgInRvX2hh c2giKTsKKyAgICAgICAgdiA9IHJiX2hhc2hfYXJlZihvcHQsIHN5bV9pbnRlbmMpOworICAg ICAgICBpZiAoIU5JTF9QKHYpKSBpbnRlbmMgPSByYl90b19lbmNvZGluZyh2KTsKKyAgICAg ICAgdiA9IHJiX2hhc2hfYXJlZihvcHQsIHN5bV9leHRlbmMpOworICAgICAgICBpZiAoIU5J TF9QKHYpKSBleHRlbmMgPSByYl90b19lbmNvZGluZyh2KTsKKyAgICB9CisKKyAgICBkaXJu YW1lX2VuYyA9IHJiX2VuY19nZXQoZGlybmFtZSk7CisgICAgaWYgKGludGVuYyk7CisgICAg ZWxzZSBpZiAocmJfdXNhc2NpaV9lbmNvZGluZygpID09IGRpcm5hbWVfZW5jCisgICAgICAg ICAgICB8fCByYl9hc2NpaThiaXRfZW5jb2RpbmcoKSA9PSBkaXJuYW1lX2VuYworICAgICAg ICAgICAgfHwgZXh0ZW5jID09IGRpcm5hbWVfZW5jKSB7CisgICAgICAgIGludGVuYyA9IE5V TEw7CisgICAgfQorICAgIGVsc2UgeworCWludGVuYyA9IGRpcm5hbWVfZW5jOworICAgICAg ICBkaXJuYW1lID0gcmJfc3RyX3RyYW5zY29kZShkaXJuYW1lLCByYl9lbmNfZnJvbV9lbmNv ZGluZyhleHRlbmMpKTsKKyAgICB9CiAgICAgRmlsZVBhdGhWYWx1ZShkaXJuYW1lKTsKKwog ICAgIERhdGFfR2V0X1N0cnVjdChkaXIsIHN0cnVjdCBkaXJfZGF0YSwgZHApOwogICAgIGlm IChkcC0+ZGlyKSBjbG9zZWRpcihkcC0+ZGlyKTsKICAgICBpZiAoZHAtPnBhdGgpIGZyZWUo ZHAtPnBhdGgpOwogICAgIGRwLT5kaXIgPSBOVUxMOwogICAgIGRwLT5wYXRoID0gTlVMTDsK KyAgICBkcC0+aW50ZW5jID0gaW50ZW5jOworICAgIGRwLT5leHRlbmMgPSBleHRlbmM7CiAg ICAgZHAtPmRpciA9IG9wZW5kaXIoUlNUUklOR19QVFIoZGlybmFtZSkpOwogICAgIGlmIChk cC0+ZGlyID09IE5VTEwpIHsKIAlpZiAoZXJybm8gPT0gRU1GSUxFIHx8IGVycm5vID09IEVO RklMRSkgewpAQCAtNDEyLDEyICs0NTMsMTIgQEAgZGlyX2luaXRpYWxpemUoVkFMVUUgZGly LCBWQUxVRSBkaXJuYW1lKQogICogIGJsb2NrLgogICovCiBzdGF0aWMgVkFMVUUKLWRpcl9z X29wZW4oVkFMVUUga2xhc3MsIFZBTFVFIGRpcm5hbWUpCitkaXJfc19vcGVuKGludCBhcmdj LCBWQUxVRSAqYXJndiwgVkFMVUUga2xhc3MpCiB7CiAgICAgc3RydWN0IGRpcl9kYXRhICpk cDsKICAgICBWQUxVRSBkaXIgPSBEYXRhX01ha2VfU3RydWN0KGtsYXNzLCBzdHJ1Y3QgZGly X2RhdGEsIDAsIGZyZWVfZGlyLCBkcCk7CiAKLSAgICBkaXJfaW5pdGlhbGl6ZShkaXIsIGRp cm5hbWUpOworICAgIGRpcl9pbml0aWFsaXplKGFyZ2MsIGFyZ3YsIGRpcik7CiAgICAgaWYg KHJiX2Jsb2NrX2dpdmVuX3AoKSkgewogCXJldHVybiByYl9lbnN1cmUocmJfeWllbGQsIGRp ciwgZGlyX2Nsb3NlLCBkaXIpOwogICAgIH0KQEAgLTQ0NSw2ICs0ODYsMTYgQEAgZGlyX2No ZWNrKFZBTFVFIGRpcikKICAgICBpZiAoZGlycC0+ZGlyID09IE5VTEwpIGRpcl9jbG9zZWQo KTtcCiB9IHdoaWxlICgwKQogCitzdGF0aWMgVkFMVUUKK2Rpcl9lbmNfc3RyKFZBTFVFIHN0 ciwgc3RydWN0IGRpcl9kYXRhICpkaXJwKQoreworICAgIHJiX2VuY19hc3NvY2lhdGUoc3Ry LCBkaXJwLT5leHRlbmMpOworICAgIGlmIChkaXJwLT5pbnRlbmMpIHsKKyAgICAgICAgc3Ry ID0gcmJfc3RyX3RyYW5zY29kZShzdHIsIHJiX2VuY19mcm9tX2VuY29kaW5nKGRpcnAtPmlu dGVuYykpOworICAgIH0KKyAgICByZXR1cm4gc3RyOworfQorCiAvKgogICogIGNhbGwtc2Vx OgogICogICAgIGRpci5pbnNwZWN0ID0+IHN0cmluZwpAQCAtNDgzLDcgKzUzNCw3IEBAIGRp cl9wYXRoKFZBTFVFIGRpcikKIAogICAgIERhdGFfR2V0X1N0cnVjdChkaXIsIHN0cnVjdCBk aXJfZGF0YSwgZGlycCk7CiAgICAgaWYgKCFkaXJwLT5wYXRoKSByZXR1cm4gUW5pbDsKLSAg ICByZXR1cm4gcmJfc3RyX25ldzIoZGlycC0+cGF0aCk7CisgICAgcmV0dXJuIGRpcl9lbmNf c3RyKHJiX3N0cl9uZXcyKGRpcnAtPnBhdGgpLCBkaXJwKTsKIH0KIAogLyoKQEAgLTUwOCw3 ICs1NTksNyBAQCBkaXJfcmVhZChWQUxVRSBkaXIpCiAgICAgZXJybm8gPSAwOwogICAgIGRw ID0gcmVhZGRpcihkaXJwLT5kaXIpOwogICAgIGlmIChkcCkgewotCXJldHVybiByYl90YWlu dGVkX3N0cl9uZXcoZHAtPmRfbmFtZSwgTkFNTEVOKGRwKSk7CisJcmV0dXJuIGRpcl9lbmNf c3RyKHJiX3RhaW50ZWRfc3RyX25ldyhkcC0+ZF9uYW1lLCBOQU1MRU4oZHApKSwgZGlycCk7 CiAgICAgfQogICAgIGVsc2UgaWYgKGVycm5vID09IDApIHsJLyogZW5kIG9mIHN0cmVhbSAq LwogCXJldHVybiBRbmlsOwpAQCAtNTQ2LDcgKzU5Nyw3IEBAIGRpcl9lYWNoKFZBTFVFIGRp cikKICAgICBHZXRESVIoZGlyLCBkaXJwKTsKICAgICByZXdpbmRkaXIoZGlycC0+ZGlyKTsK ICAgICBmb3IgKGRwID0gcmVhZGRpcihkaXJwLT5kaXIpOyBkcCAhPSBOVUxMOyBkcCA9IHJl YWRkaXIoZGlycC0+ZGlyKSkgewotCXJiX3lpZWxkKHJiX3RhaW50ZWRfc3RyX25ldyhkcC0+ ZF9uYW1lLCBOQU1MRU4oZHApKSk7CisJcmJfeWllbGQoZGlyX2VuY19zdHIocmJfdGFpbnRl ZF9zdHJfbmV3KGRwLT5kX25hbWUsIE5BTUxFTihkcCkpLCBkaXJwKSk7CiAJaWYgKGRpcnAt PmRpciA9PSBOVUxMKSBkaXJfY2xvc2VkKCk7CiAgICAgfQogICAgIHJldHVybiBkaXI7CkBA IC0xNjg1LDkgKzE3MzYsOSBAQCBkaXJfc19nbG9iKGludCBhcmdjLCBWQUxVRSAqYXJndiwg VkFMVUUgCiB9CiAKIHN0YXRpYyBWQUxVRQotZGlyX29wZW5fZGlyKFZBTFVFIHBhdGgpCitk aXJfb3Blbl9kaXIoaW50IGFyZ2MsIFZBTFVFICphcmd2KQogewotICAgIFZBTFVFIGRpciA9 IHJiX2Z1bmNhbGwocmJfY0RpciwgcmJfaW50ZXJuKCJvcGVuIiksIDEsIHBhdGgpOworICAg IFZBTFVFIGRpciA9IHJiX2Z1bmNhbGwyKHJiX2NEaXIsIHJiX2ludGVybigib3BlbiIpLCBh cmdjLCBhcmd2KTsKIAogICAgIGlmIChUWVBFKGRpcikgIT0gVF9EQVRBIHx8CiAJUkRBVEEo ZGlyKS0+ZGZyZWUgIT0gKFJVQllfREFUQV9GVU5DKWZyZWVfZGlyKSB7CkBAIC0xNzE2LDEy ICsxNzY3LDEyIEBAIGRpcl9vcGVuX2RpcihWQUxVRSBwYXRoKQogICoKICAqLwogc3RhdGlj IFZBTFVFCi1kaXJfZm9yZWFjaChWQUxVRSBpbywgVkFMVUUgZGlybmFtZSkKK2Rpcl9mb3Jl YWNoKGludCBhcmdjLCBWQUxVRSAqYXJndiwgVkFMVUUgaW8pCiB7CiAgICAgVkFMVUUgZGly OwogCi0gICAgUkVUVVJOX0VOVU1FUkFUT1IoaW8sIDEsICZkaXJuYW1lKTsKLSAgICBkaXIg PSBkaXJfb3Blbl9kaXIoZGlybmFtZSk7CisgICAgUkVUVVJOX0VOVU1FUkFUT1IoaW8sIGFy Z2MsIGFyZ3YpOworICAgIGRpciA9IGRpcl9vcGVuX2RpcihhcmdjLCBhcmd2KTsKICAgICBy Yl9lbnN1cmUoZGlyX2VhY2gsIGRpciwgZGlyX2Nsb3NlLCBkaXIpOwogICAgIHJldHVybiBR bmlsOwogfQpAQCAtMTczOCwxMSArMTc4OSwxMSBAQCBkaXJfZm9yZWFjaChWQUxVRSBpbywg VkFMVUUgZGlybmFtZSkKICAqCiAgKi8KIHN0YXRpYyBWQUxVRQotZGlyX2VudHJpZXMoVkFM VUUgaW8sIFZBTFVFIGRpcm5hbWUpCitkaXJfZW50cmllcyhpbnQgYXJnYywgVkFMVUUgKmFy Z3YsIFZBTFVFIGlvKQogewogICAgIFZBTFVFIGRpcjsKIAotICAgIGRpciA9IGRpcl9vcGVu X2RpcihkaXJuYW1lKTsKKyAgICBkaXIgPSBkaXJfb3Blbl9kaXIoYXJnYywgYXJndik7CiAg ICAgcmV0dXJuIHJiX2Vuc3VyZShyYl9BcnJheSwgZGlyLCBkaXJfY2xvc2UsIGRpcik7CiB9 CiAKQEAgLTE4NjcsMTEgKzE5MTgsMTEgQEAgSW5pdF9EaXIodm9pZCkKICAgICByYl9pbmNs dWRlX21vZHVsZShyYl9jRGlyLCByYl9tRW51bWVyYWJsZSk7CiAKICAgICByYl9kZWZpbmVf YWxsb2NfZnVuYyhyYl9jRGlyLCBkaXJfc19hbGxvYyk7Ci0gICAgcmJfZGVmaW5lX3Npbmds ZXRvbl9tZXRob2QocmJfY0RpciwgIm9wZW4iLCBkaXJfc19vcGVuLCAxKTsKKyAgICByYl9k ZWZpbmVfc2luZ2xldG9uX21ldGhvZChyYl9jRGlyLCAib3BlbiIsIGRpcl9zX29wZW4sIC0x KTsKICAgICByYl9kZWZpbmVfc2luZ2xldG9uX21ldGhvZChyYl9jRGlyLCAiZm9yZWFjaCIs IGRpcl9mb3JlYWNoLCAxKTsKLSAgICByYl9kZWZpbmVfc2luZ2xldG9uX21ldGhvZChyYl9j RGlyLCAiZW50cmllcyIsIGRpcl9lbnRyaWVzLCAxKTsKKyAgICByYl9kZWZpbmVfc2luZ2xl dG9uX21ldGhvZChyYl9jRGlyLCAiZW50cmllcyIsIGRpcl9lbnRyaWVzLCAtMSk7CiAKLSAg ICByYl9kZWZpbmVfbWV0aG9kKHJiX2NEaXIsImluaXRpYWxpemUiLCBkaXJfaW5pdGlhbGl6 ZSwgMSk7CisgICAgcmJfZGVmaW5lX21ldGhvZChyYl9jRGlyLCJpbml0aWFsaXplIiwgZGly X2luaXRpYWxpemUsIC0xKTsKICAgICByYl9kZWZpbmVfbWV0aG9kKHJiX2NEaXIsInBhdGgi LCBkaXJfcGF0aCwgMCk7CiAgICAgcmJfZGVmaW5lX21ldGhvZChyYl9jRGlyLCJpbnNwZWN0 IiwgZGlyX2luc3BlY3QsIDApOwogICAgIHJiX2RlZmluZV9tZXRob2QocmJfY0RpciwicmVh ZCIsIGRpcl9yZWFkLCAwKTsK --------------050000020705040204070007--