[ruby-core:120197] [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:
"nobu (Nobuyoshi Nakada) via ruby-core" <ruby-core@...>
Date:
2024-12-12 07:15:49 UTC
List:
ruby-core #120197
SXNzdWUgIzIwODc4IGhhcyBiZWVuIHVwZGF0ZWQgYnkgbm9idSAoTm9idXlvc2hpIE5ha2FkYSku DQoNCg0KYnlyb290IChKZWFuIEJvdXNzaWVyKSB3cm90ZSBpbiAjbm90ZS0xOToNCj4gPiB3aHkg bm90IGFsbG9jYXRlIGEgbWFuYWdpbmcgU3RyaW5nIGZyb20gdGhlIGJlZ2lubmluZz8NCj4gDQo+ IEkgZXhwbGFpbmVkIGl0IGluIHRoZSBpc3N1ZSBib2R5LiBJZiB5b3Ugd2FudCB0byBhcHBlbmQg b25lIGNoYXJhY3RlciB0byBhbiBSU3RyaW5nLCB5b3UgbmVlZCBzb21ldGhpbmcgbGlrZToNCg0K SXQgaXMgc2FtZSBhcyBgcmJfc3RyX2NhdChidWYsICZjLCAxKWAuDQoNCj4gRmlyc3QgdGhhdCBh IGxvdCBtb3JlIGNvbXBsaWNhdGVkIHRoYW4ganVzdCB3b3JraW5nIHdpdGggYSByYXcgbWFsbG9j ZWQgYnVmZmVyLCB5b3UgbmVlZCBzb21lIHByZXR0eSBnb29kIGtub3dsZWRnZSBvZiBSdWJ5IGlu bmVyIHdvcmtpbmdzIG5vdCB0byBtYWtlIGEgbWlzdGFrZS4gRm9yIGV4YW1wbGUsIHlvdSBjb3Vs ZCBzYXZlIHNvbWUgbWV0YWRhdGEgbGlrZSBgY2FwYWNpdHlgLCBidXQgYW55IHRpbWUgR0MgdHJp Z2dlcnMsIGl0J3MgcG90ZW50aWFsbHkgbm8gbG9uZ2VyIHZhbGlkLg0KDQpJIGNhbid0IGdldCB5 b3VyIHBvaW50IGhlcmUuDQpZb3VyIHByb3Bvc2FsICoqZG9lcyoqIG5lZWQgdGhlIGtub3dsZWRn ZSBtb3JlLCBJIHRoaW5rLg0KDQo+IEEgdG9uIG9mIHRpbWUgaXMgc3BlbnQgaW46DQo+ICAgLSBg cmJfc3RyX3NldF9sZW5gIChgOS44JWApDQo+ICAgLSBgcmJfc3RyX3Jlc2l6ZWAgKGA2LjglYCkN Cj4gICAtIGBSQl9GTF9URVNUX1JBV2AgKHRvIGdldCBgUlNUUklOR19QVFJgIGV0YykgKGA1Ljkl YCkNCj4gDQo+IEFsbCB0b2dldGhlciwgdGhhdCdzIG1vcmUgdGhhbiB0aGUgdGltZSBzcGVudCBk b2luZyB0aGUgYWN0dWFsIGZvcm1hdHRpbmcgd29yayBpbiBgQlNEX3ZmcHJpbnRmYCwgdGhpcyBz ZWVtcyBsaWtlIGEgbWFqb3Igb3ZlcmhlYWQgdG8gbWUuDQoNClJlY3Vyc2l2ZSBmb3JtYXQgaW4g YFRpbWUjc3RyZnRpbWVgIG1heSBoYXZlIGEgcm9vbSBmb3IgaW1wcm92ZW1lbnQuDQoNCg0KDQoN Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCkZlYXR1cmUgIzIwODc4 OiBBIG5ldyBDIEFQSSB0byBjcmVhdGUgYSBTdHJpbmcgYnkgYWRvcHRpbmcgYSBwb2ludGVyOiBg cmJfZW5jX3N0cl9hZG9wdChjb25zdCBjaGFyICpwdHIsIGxvbmcgbGVuLCBsb25nIGNhcGEsIHJi X2VuY29kaW5nICplbmMpYA0KaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcvaXNzdWVzLzIwODc4 I2NoYW5nZS0xMTA5NTYNCg0KKiBBdXRob3I6IGJ5cm9vdCAoSmVhbiBCb3Vzc2llcikNCiogU3Rh 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=