[ruby-core:120202] [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:
"byroot (Jean Boussier) via ruby-core" <ruby-core@...>
Date:
2024-12-12 08:18:31 UTC
List:
ruby-core #120202
SXNzdWUgIzIwODc4IGhhcyBiZWVuIHVwZGF0ZWQgYnkgYnlyb290IChKZWFuIEJvdXNzaWVyKS4N Cg0KDQo+IEl0IGlzIHNhbWUgYXMgcmJfc3RyX2NhdChidWYsICZjLCAxKS4NCg0KWWVzIGFuZDoN Cg0KICAtIFlvdSBjYW4ndCBhbHdheXMgdXNlIGByYl9zdHJfY2F0YCwgc29tZXRpbWVzIHlvdSBo YXZlIHRvIHBhc3MgYSBwb2ludGVyIHRvIGFuIGV4aXN0aW5nIEFQSS4NCiAgLSBgcmJfc3RyX2Nh dGAgZG9lcyBhbGwgdGhlIGNoZWNrcyBJIG1lbnRpb25lZCBhbmQgZXZlbiBtb3JlLg0KDQo+IEkg Y2FuJ3QgZ2V0IHlvdXIgcG9pbnQgaGVyZS4NCg0KSSdtIHByb3Bvc2luZyBhIHdheSB0byBidWls ZCBzdHJpbmdzIHRoYXQgaXMgYm90aCBtb3JlICpjb252ZW5pZW50KiBhbmQgbW9yZSAqZWZmaWNp ZW50Ki4NCg0KVGhlIHR5cGljYWwgdXNlIGNhc2UgYmVpbmcgW2BydWJ5L2pzb25gIGBmYnVmZmVy LmhgXShodHRwczovL2dpdGh1Yi5jb20vcnVieS9qc29uL2Jsb2IvZTFmNjQ1NjQ5OWQ0OTdmMzNm NjlhZTRjMWFmZGFmOWIyYjljNTBiMy9leHQvanNvbi9leHQvZmJ1ZmZlci9mYnVmZmVyLmgpIGFu ZCBzaW1pbGFyIGJ1ZmZlcnMgaW4gb3RoZXIgZ2VtcyBzdWNoIGFzIGBtc2dwYWNrYCBldGMuDQoN Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCkZlYXR1cmUgIzIwODc4 OiBBIG5ldyBDIEFQSSB0byBjcmVhdGUgYSBTdHJpbmcgYnkgYWRvcHRpbmcgYSBwb2ludGVyOiBg cmJfZW5jX3N0cl9hZG9wdChjb25zdCBjaGFyICpwdHIsIGxvbmcgbGVuLCBsb25nIGNhcGEsIHJi X2VuY29kaW5nICplbmMpYA0KaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcvaXNzdWVzLzIwODc4 I2NoYW5nZS0xMTA5NjENCg0KKiBBdXRob3I6IGJ5cm9vdCAoSmVhbiBCb3Vzc2llcikNCiogU3Rh dHVzOiBPcGVuDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIyMg Q29udGV4dA0KDQpBIGNvbW1vbiB1c2UgY2FzZSB3aGVuIHdyaXRpbmcgQyBleHRlbnNpb25zIGlz IHRvIGdlbmVyYXRlIHRleHQgb3IgYnl0ZXMgaW50byBhIGJ1ZmZlciwgYW5kIHRvIHJldHVybiBp dCBiYWNrDQp3cmFwcGVkIGludG8gYSBSdWJ5IFN0cmluZy4gRXhhbXBsZXMgYXJlIGBKU09OLmdl bmVyYXRlKG9iaikgLT4gU3RyaW5nYCwgYW5kIGFsbCBvdGhlciBmb3JtYXQgc2VyaWFsaXplcnMs DQpjb21wcmVzc2lvbiBsaWJyYXJpZXMgc3VjaCBhcyBgWkxpYi5kZWZsYXRlYCwgZXRjLCBidXQg YWxzbyBtZXRob2RzIHN1Y2ggYXMgYFRpbWUuc3RyZnRpbWVgLCANCg0KIyMjIEN1cnJlbnQgU29s dXRpb24NCg0KIyMjIyBXb3JrIGluIGEgYnVmZmVyIGFuZCBjb3B5IHRoZSByZXN1bHQNCg0KVGhl IG1vc3Qgb2Z0ZW4gdXNlZCBzb2x1dGlvbiBpcyB0byB3b3JrIHdpdGggYSBuYXRpdmUgYnVmZmVy IGFuZCB0byBtYW5hZ2UgYSBuYXRpdmUgYWxsb2NhdGVkIGJ1ZmZlciwNCmFuZCBvbmNlIHRoZSBn ZW5lcmF0aW9uIGlzIGRvbmUsIGNhbGwgYHJiX3N0cl9uZXcqYCB0byBjb3B5IHRoZSByZXN1bHQg aW5zaWRlIG1lbW9yeSBtYW5hZ2VkIGJ5IFJ1YnkuDQoNCkl0IHdvcmtzLCBidXQgaXNuJ3QgdmVy eSBlZmZpY2llbnQgYmVjYXVzZSBpdCBjYXVzZSBhbiBleHRyYSBjb3B5IGFuZCBhbiBleHRyYSBg ZnJlZSgpYC4NCg0KT24gYHJ1YnkvanNvbmAgbWFjcm8tYmVuY2htYXJrcywgdGhpcyByZXByZXNl bnQgYXJvdW5kIDUlIG9mIHRoZSB0aW1lIHNwZW50IGluIGBKU09OLmdlbmVyYXRlYC4NCg0KYGBg Yw0Kc3RhdGljIHZvaWQgZmJ1ZmZlcl9mcmVlKEZCdWZmZXIgKmZiKQ0Kew0KICAgIGlmIChmYi0+ cHRyICYmIGZiLT50eXBlID09IEZCVUZGRVJfSEVBUF9BTExPQ0FURUQpIHsNCiAgICAgICAgcnVi eV94ZnJlZShmYi0+cHRyKTsNCiAgICB9DQp9DQoNCnN0YXRpYyBWQUxVRSBmYnVmZmVyX3RvX3Mo RkJ1ZmZlciAqZmIpDQp7DQogICAgVkFMVUUgcmVzdWx0ID0gcmJfdXRmOF9zdHJfbmV3KEZCVUZG RVJfUFRSKGZiKSwgRkJVRkZFUl9MRU4oZmIpKTsNCiAgICBmYnVmZmVyX2ZyZWUoZmIpOw0KICAg IHJldHVybiByZXN1bHQ7DQp9DQpgYGANCg0KIyMjIyBXb3JrIGluc2lkZSBSU3RyaW5nIGFsbG9j YXRlZCBtZW1vcnkNCg0KQW5vdGhlciB3YXkgdGhpcyBpcyBjdXJyZW50bHkgZG9uZSwgaXMgdG8g YWxsb2NhdGUgYW4gYFJTdHJpbmdgIHVzaW5nIGByYl9zdHJfYnVmX25ld2AsDQphbmQgd3JpdGUg aW50byBpdCB3aXRoIHZhcmlvdXMgZnVuY3Rpb25zIHN1Y2ggYXMgYHJiX3N0cl9jYXRmYCwNCm9y IHdyaXRpbmcgcGFzdCBgUlN0cmluZy5sZW5gIHRocm91Z2ggYFJTVFJJTkdfUFRSYCBhbmQgdGhl biByZXNpemUgaXQgd2l0aCBgcmJfc3RyX3NldF9sZW5gLg0KDQpUaGUgZG93bnNpZGUgd2l0aCB0 aGlzIGFwcHJvYWNoIGlzIHRoYXQgaXQgY29udGFpbnMgYSBsb3Qgb2YgaW5lZmZpY2llbmNpZXMs IGFzIGByYl9zdHJfc2V0X2xlbmAgd2lsbCBwZXJmb3JtDQpudW1lcm91cyBzYWZldHkgY2hlY2tz LCBjb21wdXRlIGNvZGVyYW5nZSwgYW5kIHdyaXRlIHRoZSBzdHJpbmcgdGVybWluYXRvciBvbiBl dmVyeSBpbnZvY2F0aW9uLg0KDQpBbm90aGVyIG1ham9yIGlubmVmaWNpZW5jeSBpcyB0aGF0IHRo aXMgQVBJIG1ha2UgaXQgaGFyZCB0byBiZSBpbiBjb250cm9sIG9mIHRoZSBidWZmZXINCmdyb3d0 aCwgc28gaXQgY2FuIHJlc3VsdCBpbiBhIGxvdCBtb3JlIGByZWFsbG9jKClgIGNhbGxzIHRoYW4g bWFudWFsbHkgbWFuYWdpbmcgdGhlIGJ1ZmZlci4NCg0KVGhpcyBtZXRob2QgaXMgdXNlZCBieSBg S2VybmVsI3NwcmludGZgLCBgVGltZSNzdHJmdGltZWAgZXRjLCBhbmQgd2hlbiBJIGF0dGVtcHRl ZCB0byBpbXByb3ZlIGBUaW1lI3N0cmZ0aW1lYA0KcGVyZm9ybWFuY2UsIHRoaXMgcHJvYmxlbSBz aG93ZWQgdXAgYXMgdGhlIGJpZ2dlc3QgYm90dGxlbmVjazoNCg0KICAtIGh0dHBzOi8vZ2l0aHVi LmNvbS9ydWJ5L3J1YnkvcHVsbC8xMTU0Nw0KICAtIGh0dHBzOi8vZ2l0aHViLmNvbS9ydWJ5L3J1 YnkvcHVsbC8xMTU0NA0KICAtIGh0dHBzOi8vZ2l0aHViLmNvbS9ydWJ5L3J1YnkvcHVsbC8xMTU0 Mg0KDQojIyMgUHJvcG9zZWQgQVBJDQoNCkkgdGhpbmsgYSBtb3JlIGVmZmNpZW50IHdheSB0byBk byB0aGlzIHdvdWxkIGJlIHRvIHdvcmsgd2l0aCBhIG5hdGl2ZSBidWZmZXIsIGFuZCB0aGVuIGJ1 aWxkIGEgUlN0cmluZw0KdGhhdCAiYWRvcHQiIHRoZSBtZW1vcnkgcmVnaW9uLg0KDQpUZWNobmlj YWxseSwgeW91IGNhbiBjdXJyZW50bHkgZG8gdGhpcyBieSByZWFjaGluZyBkaXJlY3RseSBpbnRv IGBSU3RyaW5nYCBtZW1iZXJzLCBidXQgSSBkb24ndCB0aGluayBpdCdzIGNsZWFuLA0KYW5kIGEg ZGVkaWNhdGVkIEFQSSB3b3VsZCBiZSBwcmVmZXJhYmxlOg0KDQpgYGBjDQovKioNCiAqIFNpbWls YXIgdG8gcmJfc3RyX25ldygpLCBidXQgaXQgYWRvcHRzIHRoZSBwb2ludGVyIGluc3RlYWQgb2Yg Y29weWluZy4NCiAqDQogKiBAcGFyYW1baW5dICBwdHIgICAgICAgICAgICAgQSBtZW1vcnkgcmVn aW9uIG9mIGBjYXBhYCBieXRlcyBsZW5ndGguIE1VU1QgaGF2ZSBiZWVuIGFsbG9jYXRlZCB3aXRo IGBydWJ5X3htYWxsb2NgDQogKiBAcGFyYW1baW5dICBsZW4gICAgICAgICAgICAgTGVuZ3RoICBv ZiB0aGUgc3RyaW5nLCAgaW4gYnl0ZXMsICBub3QgaW5jbHVkaW5nICB0aGUNCiAqICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGluZyBOVUwgY2hhcmFjdGVyLCBub3QgaW5jbHVk aW5nIGV4dHJhIGNhcGFjaXR5Lg0KICogQHBhcmFtW2luXSAgY2FwYSAgICAgICAgICAgIFRoZSB1 c2FibGUgbGVuZ3RoIG9mIGBwdHJgLCBpbiBieXRlcywgIGluY2x1ZGluZyAgdGhlDQogKiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdGVybWluYXRpbmcgTlVMIGNoYXJhY3Rlci4NCiAqIEBw YXJhbVtpbl0gIGVuYyAgICAgICAgICAgICBFbmNvZGluZyBvZiBgcHRyYC4NCiAqIEBleGNlcHRp b24gIHJiX2VBcmdFcnJvciAgICBgbGVuYCBpcyBuZWdhdGl2ZS4NCiAqIEByZXR1cm4gICAgIEFu IGluc3RhbmNlICBvZiA6OnJiX2NTdHJpbmcsICBvZiBgbGVuYCAgYnl0ZXMgbGVuZ3RoLCBgY2Fw YSAtIDFgIGJ5dGVzIGNhcGFjaXR5LA0KICogICAgICAgICAgICAgYW5kIG9mIGBlbmNgIGVuY29k aW5nLg0KICogQHByZSAgICAgICAgQXQgIGxlYXN0ICBgY2FwYWAgYnl0ZXMgIG9mICBjb250aW51 b3VzICBtZW1vcnkgcmVnaW9uICBzaGFsbCAgYmUNCiAqICAgICAgICAgICAgIGFjY2Vzc2libGUg dmlhIGBwdHJgLg0KICogQHByZSAgICAgICAgYHB0cmAgTVVTVCBoYXZlIGJlZW4gYWxsb2NhdGVk IHdpdGggYHJ1YnlfeG1hbGxvY2AuDQogKiBAcHJlICAgICAgICBgcHRyYCBNVVNUIG5vdCBiZSBt YW51YWxseSBmcmVlZCBhZnRlciBgcmJfZW5jX3N0cl9hZG9wdGAgaGFzIGJlZW4gY2FsbGVkLg0K ICogQG5vdGUgICAgICAgYGVuY2AgY2FuIGJlIGEgIG51bGwgcG9pbnRlci4gIEl0IGNhbiBhbHNv IGJlICBzZWVuIGFzIGEgcm91dGluZQ0KICogICAgICAgICAgICAgaWRlbnRpY2FsIHRvIHJiX3Vz YXNjaWlfc3RyX25ldygpIHRoZW4uDQogKi8NCnJiX2VuY19zdHJfYWRvcHQoY29uc3QgY2hhciAq cHRyLCBsb25nIGxlbiwgbG9uZyBjYXBhLCByYl9lbmNvZGluZyAqZW5jKTsNCmBgYA0KDQpBbiBh bHRlcm5hdGl2ZSB0byB0aGUgYGFkb3B0YCB0ZXJtLCBjb3VsZCBiZSBgbW92ZWAuDQoNCg0KLS0t RmlsZXMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KQ2FwdHVyZSBk4oCZZcyBY3Jh biAyMDI0LTEyLTExIGHMgCAxMS4wMy4wOC5wbmcgKDI1MCBLQikNCg0KDQotLSANCmh0dHBzOi8v YnVncy5ydWJ5LWxhbmcub3JnLw0KIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KIHJ1YnktY29yZSBtYWlsaW5nIGxpc3QgLS0gcnVieS1jb3JlQG1sLnJ1Ynkt bGFuZy5vcmcKIFRvIHVuc3Vic2NyaWJlIHNlbmQgYW4gZW1haWwgdG8gcnVieS1jb3JlLWxlYXZl QG1sLnJ1YnktbGFuZy5vcmcKIHJ1YnktY29yZSBpbmZvIC0tIGh0dHBzOi8vbWwucnVieS1sYW5n Lm9yZy9tYWlsbWFuMy9saXN0cy9ydWJ5LWNvcmUubWwucnVieS1sYW5nLm9yZy8=