[ruby-core:120292] [Ruby master Feature#20878] A new C API to create a String by adopting a pointer: `rb_enc_str_adopt(const char *ptr, long len, long capa, rb_encoding *enc)`
From:
"shyouhei (Shyouhei Urabe) via ruby-core" <ruby-core@...>
Date:
2024-12-18 07:50:29 UTC
List:
ruby-core #120292
SXNzdWUgIzIwODc4IGhhcyBiZWVuIHVwZGF0ZWQgYnkgc2h5b3VoZWkgKFNoeW91aGVpIFVyYWJl KS4NCg0KDQpPbmUgdGhpbmcgcG9pbnRlZCBvdXQgaW4gdGhlIGxhc3QgZGV2ZWxvcGVyIG1lZXRp bmcgd2FzIHRoYXQgZnV0dXJlIE1NVEsgbWlnaHQgd2FudCB0byBicmVhayAiYXNwcmludGYgcmV0 dXJuIHZhbHVlcyBjYW4gYmUgcmVjbGFpbWFibGUgdXNpbmcgcnVieV94ZnJlZSIgYXNzdW1wdGlv biBhdCBwcm9jZXNzIHN0YXJ0dXAsIGJ5IGNob29zaW5nIGRpZmZlcmVudCBtZW1vcnkgbWFuYWdl bWVudCBzY2hlbWVzLg0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQpGZWF0dXJlICMyMDg3ODogQSBuZXcgQyBBUEkgdG8gY3JlYXRlIGEgU3RyaW5nIGJ5IGFkb3B0 aW5nIGEgcG9pbnRlcjogYHJiX2VuY19zdHJfYWRvcHQoY29uc3QgY2hhciAqcHRyLCBsb25nIGxl biwgbG9uZyBjYXBhLCByYl9lbmNvZGluZyAqZW5jKWANCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcu b3JnL2lzc3Vlcy8yMDg3OCNjaGFuZ2UtMTExMDU3DQoNCiogQXV0aG9yOiBieXJvb3QgKEplYW4g Qm91c3NpZXIpDQoqIFN0YXR1czogT3Blbg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQ0KIyMjIENvbnRleHQNCg0KQSBjb21tb24gdXNlIGNhc2Ugd2hlbiB3cml0aW5n IEMgZXh0ZW5zaW9ucyBpcyB0byBnZW5lcmF0ZSB0ZXh0IG9yIGJ5dGVzIGludG8gYSBidWZmZXIs IGFuZCB0byByZXR1cm4gaXQgYmFjaw0Kd3JhcHBlZCBpbnRvIGEgUnVieSBTdHJpbmcuIEV4YW1w bGVzIGFyZSBgSlNPTi5nZW5lcmF0ZShvYmopIC0+IFN0cmluZ2AsIGFuZCBhbGwgb3RoZXIgZm9y bWF0IHNlcmlhbGl6ZXJzLA0KY29tcHJlc3Npb24gbGlicmFyaWVzIHN1Y2ggYXMgYFpMaWIuZGVm bGF0ZWAsIGV0YywgYnV0IGFsc28gbWV0aG9kcyBzdWNoIGFzIGBUaW1lLnN0cmZ0aW1lYCwgDQoN CiMjIyBDdXJyZW50IFNvbHV0aW9uDQoNCiMjIyMgV29yayBpbiBhIGJ1ZmZlciBhbmQgY29weSB0 aGUgcmVzdWx0DQoNClRoZSBtb3N0IG9mdGVuIHVzZWQgc29sdXRpb24gaXMgdG8gd29yayB3aXRo IGEgbmF0aXZlIGJ1ZmZlciBhbmQgdG8gbWFuYWdlIGEgbmF0aXZlIGFsbG9jYXRlZCBidWZmZXIs DQphbmQgb25jZSB0aGUgZ2VuZXJhdGlvbiBpcyBkb25lLCBjYWxsIGByYl9zdHJfbmV3KmAgdG8g Y29weSB0aGUgcmVzdWx0IGluc2lkZSBtZW1vcnkgbWFuYWdlZCBieSBSdWJ5Lg0KDQpJdCB3b3Jr cywgYnV0IGlzbid0IHZlcnkgZWZmaWNpZW50IGJlY2F1c2UgaXQgY2F1c2UgYW4gZXh0cmEgY29w eSBhbmQgYW4gZXh0cmEgYGZyZWUoKWAuDQoNCk9uIGBydWJ5L2pzb25gIG1hY3JvLWJlbmNobWFy a3MsIHRoaXMgcmVwcmVzZW50IGFyb3VuZCA1JSBvZiB0aGUgdGltZSBzcGVudCBpbiBgSlNPTi5n ZW5lcmF0ZWAuDQoNCmBgYGMNCnN0YXRpYyB2b2lkIGZidWZmZXJfZnJlZShGQnVmZmVyICpmYikN CnsNCiAgICBpZiAoZmItPnB0ciAmJiBmYi0+dHlwZSA9PSBGQlVGRkVSX0hFQVBfQUxMT0NBVEVE KSB7DQogICAgICAgIHJ1YnlfeGZyZWUoZmItPnB0cik7DQogICAgfQ0KfQ0KDQpzdGF0aWMgVkFM VUUgZmJ1ZmZlcl90b19zKEZCdWZmZXIgKmZiKQ0Kew0KICAgIFZBTFVFIHJlc3VsdCA9IHJiX3V0 Zjhfc3RyX25ldyhGQlVGRkVSX1BUUihmYiksIEZCVUZGRVJfTEVOKGZiKSk7DQogICAgZmJ1ZmZl cl9mcmVlKGZiKTsNCiAgICByZXR1cm4gcmVzdWx0Ow0KfQ0KYGBgDQoNCiMjIyMgV29yayBpbnNp ZGUgUlN0cmluZyBhbGxvY2F0ZWQgbWVtb3J5DQoNCkFub3RoZXIgd2F5IHRoaXMgaXMgY3VycmVu dGx5IGRvbmUsIGlzIHRvIGFsbG9jYXRlIGFuIGBSU3RyaW5nYCB1c2luZyBgcmJfc3RyX2J1Zl9u ZXdgLA0KYW5kIHdyaXRlIGludG8gaXQgd2l0aCB2YXJpb3VzIGZ1bmN0aW9ucyBzdWNoIGFzIGBy Yl9zdHJfY2F0ZmAsDQpvciB3cml0aW5nIHBhc3QgYFJTdHJpbmcubGVuYCB0aHJvdWdoIGBSU1RS SU5HX1BUUmAgYW5kIHRoZW4gcmVzaXplIGl0IHdpdGggYHJiX3N0cl9zZXRfbGVuYC4NCg0KVGhl IGRvd25zaWRlIHdpdGggdGhpcyBhcHByb2FjaCBpcyB0aGF0IGl0IGNvbnRhaW5zIGEgbG90IG9m IGluZWZmaWNpZW5jaWVzLCBhcyBgcmJfc3RyX3NldF9sZW5gIHdpbGwgcGVyZm9ybQ0KbnVtZXJv dXMgc2FmZXR5IGNoZWNrcywgY29tcHV0ZSBjb2RlcmFuZ2UsIGFuZCB3cml0ZSB0aGUgc3RyaW5n IHRlcm1pbmF0b3Igb24gZXZlcnkgaW52b2NhdGlvbi4NCg0KQW5vdGhlciBtYWpvciBpbm5lZmlj aWVuY3kgaXMgdGhhdCB0aGlzIEFQSSBtYWtlIGl0IGhhcmQgdG8gYmUgaW4gY29udHJvbCBvZiB0 aGUgYnVmZmVyDQpncm93dGgsIHNvIGl0IGNhbiByZXN1bHQgaW4gYSBsb3QgbW9yZSBgcmVhbGxv YygpYCBjYWxscyB0aGFuIG1hbnVhbGx5IG1hbmFnaW5nIHRoZSBidWZmZXIuDQoNClRoaXMgbWV0 aG9kIGlzIHVzZWQgYnkgYEtlcm5lbCNzcHJpbnRmYCwgYFRpbWUjc3RyZnRpbWVgIGV0YywgYW5k IHdoZW4gSSBhdHRlbXB0ZWQgdG8gaW1wcm92ZSBgVGltZSNzdHJmdGltZWANCnBlcmZvcm1hbmNl LCB0aGlzIHByb2JsZW0gc2hvd2VkIHVwIGFzIHRoZSBiaWdnZXN0IGJvdHRsZW5lY2s6DQoNCiAg LSBodHRwczovL2dpdGh1Yi5jb20vcnVieS9ydWJ5L3B1bGwvMTE1NDcNCiAgLSBodHRwczovL2dp dGh1Yi5jb20vcnVieS9ydWJ5L3B1bGwvMTE1NDQNCiAgLSBodHRwczovL2dpdGh1Yi5jb20vcnVi eS9ydWJ5L3B1bGwvMTE1NDINCg0KIyMjIFByb3Bvc2VkIEFQSQ0KDQpJIHRoaW5rIGEgbW9yZSBl ZmZjaWVudCB3YXkgdG8gZG8gdGhpcyB3b3VsZCBiZSB0byB3b3JrIHdpdGggYSBuYXRpdmUgYnVm ZmVyLCBhbmQgdGhlbiBidWlsZCBhIFJTdHJpbmcNCnRoYXQgImFkb3B0IiB0aGUgbWVtb3J5IHJl Z2lvbi4NCg0KVGVjaG5pY2FsbHksIHlvdSBjYW4gY3VycmVudGx5IGRvIHRoaXMgYnkgcmVhY2hp bmcgZGlyZWN0bHkgaW50byBgUlN0cmluZ2AgbWVtYmVycywgYnV0IEkgZG9uJ3QgdGhpbmsgaXQn cyBjbGVhbiwNCmFuZCBhIGRlZGljYXRlZCBBUEkgd291bGQgYmUgcHJlZmVyYWJsZToNCg0KYGBg Yw0KLyoqDQogKiBTaW1pbGFyIHRvIHJiX3N0cl9uZXcoKSwgYnV0IGl0IGFkb3B0cyB0aGUgcG9p bnRlciBpbnN0ZWFkIG9mIGNvcHlpbmcuDQogKg0KICogQHBhcmFtW2luXSAgcHRyICAgICAgICAg ICAgIEEgbWVtb3J5IHJlZ2lvbiBvZiBgY2FwYWAgYnl0ZXMgbGVuZ3RoLiBNVVNUIGhhdmUgYmVl biBhbGxvY2F0ZWQgd2l0aCBgcnVieV94bWFsbG9jYA0KICogQHBhcmFtW2luXSAgbGVuICAgICAg ICAgICAgIExlbmd0aCAgb2YgdGhlIHN0cmluZywgIGluIGJ5dGVzLCAgbm90IGluY2x1ZGluZyAg dGhlDQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVybWluYXRpbmcgTlVMIGNoYXJh Y3Rlciwgbm90IGluY2x1ZGluZyBleHRyYSBjYXBhY2l0eS4NCiAqIEBwYXJhbVtpbl0gIGNhcGEg ICAgICAgICAgICBUaGUgdXNhYmxlIGxlbmd0aCBvZiBgcHRyYCwgaW4gYnl0ZXMsICBpbmNsdWRp bmcgIHRoZQ0KICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0aW5nIE5VTCBj aGFyYWN0ZXIuDQogKiBAcGFyYW1baW5dICBlbmMgICAgICAgICAgICAgRW5jb2Rpbmcgb2YgYHB0 cmAuDQogKiBAZXhjZXB0aW9uICByYl9lQXJnRXJyb3IgICAgYGxlbmAgaXMgbmVnYXRpdmUuDQog KiBAcmV0dXJuICAgICBBbiBpbnN0YW5jZSAgb2YgOjpyYl9jU3RyaW5nLCAgb2YgYGxlbmAgIGJ5 dGVzIGxlbmd0aCwgYGNhcGEgLSAxYCBieXRlcyBjYXBhY2l0eSwNCiAqICAgICAgICAgICAgIGFu ZCBvZiBgZW5jYCBlbmNvZGluZy4NCiAqIEBwcmUgICAgICAgIEF0ICBsZWFzdCAgYGNhcGFgIGJ5 dGVzICBvZiAgY29udGludW91cyAgbWVtb3J5IHJlZ2lvbiAgc2hhbGwgIGJlDQogKiAgICAgICAg ICAgICBhY2Nlc3NpYmxlIHZpYSBgcHRyYC4NCiAqIEBwcmUgICAgICAgIGBwdHJgIE1VU1QgaGF2 ZSBiZWVuIGFsbG9jYXRlZCB3aXRoIGBydWJ5X3htYWxsb2NgLg0KICogQHByZSAgICAgICAgYHB0 cmAgTVVTVCBub3QgYmUgbWFudWFsbHkgZnJlZWQgYWZ0ZXIgYHJiX2VuY19zdHJfYWRvcHRgIGhh cyBiZWVuIGNhbGxlZC4NCiAqIEBub3RlICAgICAgIGBlbmNgIGNhbiBiZSBhICBudWxsIHBvaW50 ZXIuICBJdCBjYW4gYWxzbyBiZSAgc2VlbiBhcyBhIHJvdXRpbmUNCiAqICAgICAgICAgICAgIGlk ZW50aWNhbCB0byByYl91c2FzY2lpX3N0cl9uZXcoKSB0aGVuLg0KICovDQpyYl9lbmNfc3RyX2Fk b3B0KGNvbnN0IGNoYXIgKnB0ciwgbG9uZyBsZW4sIGxvbmcgY2FwYSwgcmJfZW5jb2RpbmcgKmVu Yyk7DQpgYGANCg0KQW4gYWx0ZXJuYXRpdmUgdG8gdGhlIGBhZG9wdGAgdGVybSwgY291bGQgYmUg YG1vdmVgLg0KDQoNCi0tLUZpbGVzLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCkNh cHR1cmUgZOKAmWXMgWNyYW4gMjAyNC0xMi0xMSBhzIAgMTEuMDMuMDgucG5nICgyNTAgS0IpDQoN Cg0KLS0gDQpodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy8NCiBfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCiBydWJ5LWNvcmUgbWFpbGluZyBsaXN0IC0tIHJ1 YnktY29yZUBtbC5ydWJ5LWxhbmcub3JnCiBUbyB1bnN1YnNjcmliZSBzZW5kIGFuIGVtYWlsIHRv IHJ1YnktY29yZS1sZWF2ZUBtbC5ydWJ5LWxhbmcub3JnCiBydWJ5LWNvcmUgaW5mbyAtLSBodHRw czovL21sLnJ1YnktbGFuZy5vcmcvbWFpbG1hbjMvbGlzdHMvcnVieS1jb3JlLm1sLnJ1YnktbGFu Zy5vcmcv