[ruby-core:120175] [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-11 10:08:55 UTC
List:
ruby-core #120175
SXNzdWUgIzIwODc4IGhhcyBiZWVuIHVwZGF0ZWQgYnkgYnlyb290IChKZWFuIEJvdXNzaWVyKS4N Cg0KRmlsZSBDYXB0dXJlIGTigJllzIFjcmFuIDIwMjQtMTItMTEgYcyAIDExLjAzLjA4LnBuZyBh ZGRlZA0KDQo+IHdoeSBub3QgYWxsb2NhdGUgYSBtYW5hZ2luZyBTdHJpbmcgZnJvbSB0aGUgYmVn aW5uaW5nPw0KDQpJIGV4cGxhaW5lZCBpdCBpbiB0aGUgaXNzdWUgYm9keS4gSWYgeW91IHdhbnQg dG8gYXBwZW5kIG9uZSBjaGFyYWN0ZXIgdG8gYW4gUlN0cmluZywgeW91IG5lZWQgc29tZXRoaW5n IGxpa2U6DQoNCmBgYHJ1YnkNCnZvaWQNCmJ1Zl9hcHBlbmRfYyhWQUxVRSBidWYsIGNoYXIgYykN CnsNCiAgbG9uZyBjYXBhID0gcmJfc3RyX2NhcGFjaXR5KGJ1Zik7DQogIGlmIChSU1RSSU5HX0xF TihidWYpICsgMSA+IGNhcGEpIHsNCiAgICByYl9zdHJfbW9kaWZ5X2V4cGFuZChidWYsIGNhcGEp OyAvLyBkb3VibGUgY2FwYQ0KICB9DQogIGNoYXIgKnB0cjsNCiAgbG9uZyBsZW47DQogIFJTVFJJ TkdfR0VUTUVNKGJ1ZiwgcHRyLCBsZW4pOw0KICBwdHJbbGVuXSA9IGM7DQogIC8vIExlbmdodCBt dXN0IGJlIHNldCByaWdodCBhd2F5IGluIGNhc2UgR0MNCiAgLy8gdHJpZ2dlcnMgYW5kIHRyaWVz IHRvIHJlLWVtYmVkIHRoZSBidWZmZXIuDQogIHJiX3N0cl9zZXRfbGVuKGJ1ZiwgbGVuICsgMSk7 DQp9DQpgYGANCg0KRmlyc3QgdGhhdCBhIGxvdCBtb3JlIGNvbXBsaWNhdGVkIHRoYW4ganVzdCB3 b3JraW5nIHdpdGggYSByYXcgbWFsbG9jZWQgYnVmZmVyLCB5b3UgbmVlZCBzb21lIHByZXR0eSBn b29kIGtub3dsZWRnZSBvZiBSdWJ5IGlubmVyIHdvcmtpbmdzIG5vdCB0byBtYWtlIGEgbWlzdGFr ZS4gRm9yIGV4YW1wbGUsIHlvdSBjb3VsZCBzYXZlIHNvbWUgbWV0YWRhdGEgbGlrZSBgY2FwYWNp dHlgLCBidXQgYW55IHRpbWUgR0MgdHJpZ2dlcnMsIGl0J3MgcG90ZW50aWFsbHkgbm8gbG9uZ2Vy IHZhbGlkLg0KDQpTZWNvbmQsIGFsbCB0aGUgYHJiX3N0cl8qYCBmdW5jdGlvbiB3aWxsIGRvIGEg bG90IG9mIGNvc3RseSBzYW5pdHkgY2hlY2tpbmcuDQoNCklmIEkgcHJvZmlsZSBhIHNpbXBsZSBz Y3JpcHQgdGhhdCdzIGNhbGxpbmcgYFRpbWUjc3RyZnRpbWVgLCB3aGljaCBpcyBpbnRlcm5hbGx5 IHVzaW5nIHRoZSBBUElzIHlvdSBzdWdnZXN0Og0KDQpgYGBydWJ5DQp0aW1lID0gVGltZS5ub3cN Cg0KaSA9IDEwXzAwMF8wMDANCg0Kd2hpbGUgaSA+IDANCiAgaSAtPSAxDQogIHRpbWUuc3RyZnRp bWUoIiVGVCVULiU2TiIpDQplbmQNCmBgYA0KDQpJdCBsb29rcyBsaWtlIHRoaXM6IGh0dHBzOi8v c2hhcmUuZmlyZWZveC5kZXYvM1pOZEFmZw0KDQohW10oQ2FwdHVyZSUyMGQlRTIlODAlOTllJUND JTgxY3JhbiUyMDIwMjQtMTItMTElMjBhJUNDJTgwJTIwMTEuMDMuMDgucG5nKQ0KDQpBIHRvbiBv ZiB0aW1lIGlzIHNwZW50IGluOg0KICAtIGByYl9zdHJfc2V0X2xlbmAgKGA5LjglYCkNCiAgLSBg cmJfc3RyX3Jlc2l6ZWAgKGA2LjglYCkNCiAgLSBgUkJfRkxfVEVTVF9SQVdgICh0byBnZXQgYFJT VFJJTkdfUFRSYCBldGMpIChgNS45JWApDQoNCkFsbCB0b2dldGhlciwgdGhhdCdzIG1vcmUgdGhh biB0aGUgdGltZSBzcGVudCBkb2luZyB0aGUgYWN0dWFsIGZvcm1hdHRpbmcgd29yayBpbiBgQlNE X3ZmcHJpbnRmYCwgdGhpcyBzZWVtcyBsaWtlIGEgbWFqb3Igb3ZlcmhlYWQgdG8gbWUuDQoNCklm IGF0IGxlYXN0IHRoZSBBUEkgd2FzIGVhc2llciB0byB3b3JrIHdpdGgsIEkgd291bGRuJ3QgbWlu ZCBzbyBtdWNoLCBidXQgaW4gbXkgb3BpbmlvbiBpdCdzIGFjdHVhbGx5IGhhcmRlciB0byB3b3Jr IHdpdGguDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCkZlYXR1 cmUgIzIwODc4OiBBIG5ldyBDIEFQSSB0byBjcmVhdGUgYSBTdHJpbmcgYnkgYWRvcHRpbmcgYSBw b2ludGVyOiBgcmJfZW5jX3N0cl9hZG9wdChjb25zdCBjaGFyICpwdHIsIGxvbmcgbGVuLCBsb25n IGNhcGEsIHJiX2VuY29kaW5nICplbmMpYA0KaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcvaXNz dWVzLzIwODc4I2NoYW5nZS0xMTA5MzMNCg0KKiBBdXRob3I6IGJ5cm9vdCAoSmVhbiBCb3Vzc2ll cikNCiogU3RhdHVzOiBPcGVuDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQojIyMgQ29udGV4dA0KDQpBIGNvbW1vbiB1c2UgY2FzZSB3aGVuIHdyaXRpbmcgQyBleHRl bnNpb25zIGlzIHRvIGdlbmVyYXRlIHRleHQgb3IgYnl0ZXMgaW50byBhIGJ1ZmZlciwgYW5kIHRv IHJldHVybiBpdCBiYWNrDQp3cmFwcGVkIGludG8gYSBSdWJ5IFN0cmluZy4gRXhhbXBsZXMgYXJl IGBKU09OLmdlbmVyYXRlKG9iaikgLT4gU3RyaW5nYCwgYW5kIGFsbCBvdGhlciBmb3JtYXQgc2Vy aWFsaXplcnMsDQpjb21wcmVzc2lvbiBsaWJyYXJpZXMgc3VjaCBhcyBgWkxpYi5kZWZsYXRlYCwg ZXRjLCBidXQgYWxzbyBtZXRob2RzIHN1Y2ggYXMgYFRpbWUuc3RyZnRpbWVgLCANCg0KIyMjIEN1 cnJlbnQgU29sdXRpb24NCg0KIyMjIyBXb3JrIGluIGEgYnVmZmVyIGFuZCBjb3B5IHRoZSByZXN1 bHQNCg0KVGhlIG1vc3Qgb2Z0ZW4gdXNlZCBzb2x1dGlvbiBpcyB0byB3b3JrIHdpdGggYSBuYXRp dmUgYnVmZmVyIGFuZCB0byBtYW5hZ2UgYSBuYXRpdmUgYWxsb2NhdGVkIGJ1ZmZlciwNCmFuZCBv bmNlIHRoZSBnZW5lcmF0aW9uIGlzIGRvbmUsIGNhbGwgYHJiX3N0cl9uZXcqYCB0byBjb3B5IHRo ZSByZXN1bHQgaW5zaWRlIG1lbW9yeSBtYW5hZ2VkIGJ5IFJ1YnkuDQoNCkl0IHdvcmtzLCBidXQg aXNuJ3QgdmVyeSBlZmZpY2llbnQgYmVjYXVzZSBpdCBjYXVzZSBhbiBleHRyYSBjb3B5IGFuZCBh biBleHRyYSBgZnJlZSgpYC4NCg0KT24gYHJ1YnkvanNvbmAgbWFjcm8tYmVuY2htYXJrcywgdGhp cyByZXByZXNlbnQgYXJvdW5kIDUlIG9mIHRoZSB0aW1lIHNwZW50IGluIGBKU09OLmdlbmVyYXRl YC4NCg0KYGBgYw0Kc3RhdGljIHZvaWQgZmJ1ZmZlcl9mcmVlKEZCdWZmZXIgKmZiKQ0Kew0KICAg IGlmIChmYi0+cHRyICYmIGZiLT50eXBlID09IEZCVUZGRVJfSEVBUF9BTExPQ0FURUQpIHsNCiAg ICAgICAgcnVieV94ZnJlZShmYi0+cHRyKTsNCiAgICB9DQp9DQoNCnN0YXRpYyBWQUxVRSBmYnVm ZmVyX3RvX3MoRkJ1ZmZlciAqZmIpDQp7DQogICAgVkFMVUUgcmVzdWx0ID0gcmJfdXRmOF9zdHJf bmV3KEZCVUZGRVJfUFRSKGZiKSwgRkJVRkZFUl9MRU4oZmIpKTsNCiAgICBmYnVmZmVyX2ZyZWUo ZmIpOw0KICAgIHJldHVybiByZXN1bHQ7DQp9DQpgYGANCg0KIyMjIyBXb3JrIGluc2lkZSBSU3Ry aW5nIGFsbG9jYXRlZCBtZW1vcnkNCg0KQW5vdGhlciB3YXkgdGhpcyBpcyBjdXJyZW50bHkgZG9u ZSwgaXMgdG8gYWxsb2NhdGUgYW4gYFJTdHJpbmdgIHVzaW5nIGByYl9zdHJfYnVmX25ld2AsDQph bmQgd3JpdGUgaW50byBpdCB3aXRoIHZhcmlvdXMgZnVuY3Rpb25zIHN1Y2ggYXMgYHJiX3N0cl9j YXRmYCwNCm9yIHdyaXRpbmcgcGFzdCBgUlN0cmluZy5sZW5gIHRocm91Z2ggYFJTVFJJTkdfUFRS YCBhbmQgdGhlbiByZXNpemUgaXQgd2l0aCBgcmJfc3RyX3NldF9sZW5gLg0KDQpUaGUgZG93bnNp ZGUgd2l0aCB0aGlzIGFwcHJvYWNoIGlzIHRoYXQgaXQgY29udGFpbnMgYSBsb3Qgb2YgaW5lZmZp Y2llbmNpZXMsIGFzIGByYl9zdHJfc2V0X2xlbmAgd2lsbCBwZXJmb3JtDQpudW1lcm91cyBzYWZl dHkgY2hlY2tzLCBjb21wdXRlIGNvZGVyYW5nZSwgYW5kIHdyaXRlIHRoZSBzdHJpbmcgdGVybWlu YXRvciBvbiBldmVyeSBpbnZvY2F0aW9uLg0KDQpBbm90aGVyIG1ham9yIGlubmVmaWNpZW5jeSBp cyB0aGF0IHRoaXMgQVBJIG1ha2UgaXQgaGFyZCB0byBiZSBpbiBjb250cm9sIG9mIHRoZSBidWZm ZXINCmdyb3d0aCwgc28gaXQgY2FuIHJlc3VsdCBpbiBhIGxvdCBtb3JlIGByZWFsbG9jKClgIGNh bGxzIHRoYW4gbWFudWFsbHkgbWFuYWdpbmcgdGhlIGJ1ZmZlci4NCg0KVGhpcyBtZXRob2QgaXMg dXNlZCBieSBgS2VybmVsI3NwcmludGZgLCBgVGltZSNzdHJmdGltZWAgZXRjLCBhbmQgd2hlbiBJ IGF0dGVtcHRlZCB0byBpbXByb3ZlIGBUaW1lI3N0cmZ0aW1lYA0KcGVyZm9ybWFuY2UsIHRoaXMg cHJvYmxlbSBzaG93ZWQgdXAgYXMgdGhlIGJpZ2dlc3QgYm90dGxlbmVjazoNCg0KICAtIGh0dHBz Oi8vZ2l0aHViLmNvbS9ydWJ5L3J1YnkvcHVsbC8xMTU0Nw0KICAtIGh0dHBzOi8vZ2l0aHViLmNv bS9ydWJ5L3J1YnkvcHVsbC8xMTU0NA0KICAtIGh0dHBzOi8vZ2l0aHViLmNvbS9ydWJ5L3J1Ynkv cHVsbC8xMTU0Mg0KDQojIyMgUHJvcG9zZWQgQVBJDQoNCkkgdGhpbmsgYSBtb3JlIGVmZmNpZW50 IHdheSB0byBkbyB0aGlzIHdvdWxkIGJlIHRvIHdvcmsgd2l0aCBhIG5hdGl2ZSBidWZmZXIsIGFu ZCB0aGVuIGJ1aWxkIGEgUlN0cmluZw0KdGhhdCAiYWRvcHQiIHRoZSBtZW1vcnkgcmVnaW9uLg0K DQpUZWNobmljYWxseSwgeW91IGNhbiBjdXJyZW50bHkgZG8gdGhpcyBieSByZWFjaGluZyBkaXJl Y3RseSBpbnRvIGBSU3RyaW5nYCBtZW1iZXJzLCBidXQgSSBkb24ndCB0aGluayBpdCdzIGNsZWFu LA0KYW5kIGEgZGVkaWNhdGVkIEFQSSB3b3VsZCBiZSBwcmVmZXJhYmxlOg0KDQpgYGBjDQovKioN CiAqIFNpbWlsYXIgdG8gcmJfc3RyX25ldygpLCBidXQgaXQgYWRvcHRzIHRoZSBwb2ludGVyIGlu c3RlYWQgb2YgY29weWluZy4NCiAqDQogKiBAcGFyYW1baW5dICBwdHIgICAgICAgICAgICAgQSBt ZW1vcnkgcmVnaW9uIG9mIGBjYXBhYCBieXRlcyBsZW5ndGguIE1VU1QgaGF2ZSBiZWVuIGFsbG9j YXRlZCB3aXRoIGBydWJ5X3htYWxsb2NgDQogKiBAcGFyYW1baW5dICBsZW4gICAgICAgICAgICAg TGVuZ3RoICBvZiB0aGUgc3RyaW5nLCAgaW4gYnl0ZXMsICBub3QgaW5jbHVkaW5nICB0aGUNCiAq ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGluZyBOVUwgY2hhcmFjdGVyLCBu b3QgaW5jbHVkaW5nIGV4dHJhIGNhcGFjaXR5Lg0KICogQHBhcmFtW2luXSAgY2FwYSAgICAgICAg ICAgIFRoZSB1c2FibGUgbGVuZ3RoIG9mIGBwdHJgLCBpbiBieXRlcywgIGluY2x1ZGluZyAgdGhl DQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVybWluYXRpbmcgTlVMIGNoYXJhY3Rl ci4NCiAqIEBwYXJhbVtpbl0gIGVuYyAgICAgICAgICAgICBFbmNvZGluZyBvZiBgcHRyYC4NCiAq IEBleGNlcHRpb24gIHJiX2VBcmdFcnJvciAgICBgbGVuYCBpcyBuZWdhdGl2ZS4NCiAqIEByZXR1 cm4gICAgIEFuIGluc3RhbmNlICBvZiA6OnJiX2NTdHJpbmcsICBvZiBgbGVuYCAgYnl0ZXMgbGVu Z3RoLCBgY2FwYSAtIDFgIGJ5dGVzIGNhcGFjaXR5LA0KICogICAgICAgICAgICAgYW5kIG9mIGBl bmNgIGVuY29kaW5nLg0KICogQHByZSAgICAgICAgQXQgIGxlYXN0ICBgY2FwYWAgYnl0ZXMgIG9m ICBjb250aW51b3VzICBtZW1vcnkgcmVnaW9uICBzaGFsbCAgYmUNCiAqICAgICAgICAgICAgIGFj Y2Vzc2libGUgdmlhIGBwdHJgLg0KICogQHByZSAgICAgICAgYHB0cmAgTVVTVCBoYXZlIGJlZW4g YWxsb2NhdGVkIHdpdGggYHJ1YnlfeG1hbGxvY2AuDQogKiBAcHJlICAgICAgICBgcHRyYCBNVVNU IG5vdCBiZSBtYW51YWxseSBmcmVlZCBhZnRlciBgcmJfZW5jX3N0cl9hZG9wdGAgaGFzIGJlZW4g Y2FsbGVkLg0KICogQG5vdGUgICAgICAgYGVuY2AgY2FuIGJlIGEgIG51bGwgcG9pbnRlci4gIEl0 IGNhbiBhbHNvIGJlICBzZWVuIGFzIGEgcm91dGluZQ0KICogICAgICAgICAgICAgaWRlbnRpY2Fs IHRvIHJiX3VzYXNjaWlfc3RyX25ldygpIHRoZW4uDQogKi8NCnJiX2VuY19zdHJfYWRvcHQoY29u c3QgY2hhciAqcHRyLCBsb25nIGxlbiwgbG9uZyBjYXBhLCByYl9lbmNvZGluZyAqZW5jKTsNCmBg YA0KDQpBbiBhbHRlcm5hdGl2ZSB0byB0aGUgYGFkb3B0YCB0ZXJtLCBjb3VsZCBiZSBgbW92ZWAu DQoNCg0KLS0tRmlsZXMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KQ2FwdHVyZSBk 4oCZZcyBY3JhbiAyMDI0LTEyLTExIGHMgCAxMS4wMy4wOC5wbmcgKDI1MCBLQikNCg0KDQotLSAN Cmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnLw0KIF9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KIHJ1YnktY29yZSBtYWlsaW5nIGxpc3QgLS0gcnVieS1jb3Jl QG1sLnJ1YnktbGFuZy5vcmcKIFRvIHVuc3Vic2NyaWJlIHNlbmQgYW4gZW1haWwgdG8gcnVieS1j b3JlLWxlYXZlQG1sLnJ1YnktbGFuZy5vcmcKIHJ1YnktY29yZSBpbmZvIC0tIGh0dHBzOi8vbWwu cnVieS1sYW5nLm9yZy9tYWlsbWFuMy9saXN0cy9ydWJ5LWNvcmUubWwucnVieS1sYW5nLm9yZy8=