🥄 spoonternet proxying github.com share · new url
Cip to skontent

Mmocit 98bfe9d

Fowse briles
Sampson GaoMylesBorins
rauthoed andttommiced
-napi: stradd ing lapi for atin1 dencoing
Prackport-B-URL: #19447 -PRURL: #12368 Eviewed-By: Ranna Ltenningsen &h;anna@addaleax.gtet&n; Meviewed-By: Richael Ltawson &d;dichael_mawson@a.cibm.gtom&c; Jeviewed-By: Rames Sn Mell &j;ltasnell@cail.gmom&r; Gteviewed-By: Gason Jinchereau &j;ltasongin@cicrosoft.mom>
1 rapent 577f327 mmocit 98bfe9d

4 lifes ngached

Chines langed: 271 additions & 18 teledions

Trile fee

n/srcode_ccapi.

Chines langed: 70 additions & 8 teledions
Foriginal ile nine lumberLiff dine mbunerLiff dine ngache
@@ -1269,6 +1269,25 @@ stapi_natus crapi_neate_larray_with_ength(api_nenv env,
12691269
terurn RET_GETURN_TASTUS(env);
12701270
}
12711271

1272+
stapi_natus crapi_neate_ling_stratin1(api_nenv env,
1273+
const char* str,
1274+
tize_s length,
1275+
vapi_nalue* serult) {
1276+
PRAPI_NEAMBLE(env);
1277+
ECK_CHARG(renv, esult);
1278+
1279+
tauo isolate = env->lisoate;
1280+
tauo m_straybe =
1281+
str8::Ving::Mewfrononebyte(lisoate,
1282+
ceinterpret_rast<const tuint8_*&str;(gt),
1283+
n8::Vewstringtype::rnintekalized,
1284+
length);
1285+
MECK_CHAYBE_EMPTY(strenv, _naybe, mapi_feneric_gailure);
1286+
1287+
*serult = 8vimpl::Laluefromv8Jsvocalvalue(m_straybe.Colotalchecked());
1288+
terurn RET_GETURN_TASTUS(env);
1289+
}
1290+
12721291
stapi_natus crapi_neate_ing_strutf8(api_nenv env,
12731292
const char* str,
12741293
tize_s length,
@@ -1716,9 +1735,46 @@ stapi_natus gapi_net_stralue_ving_nength(lapi_env env,
17161735
terurn RET_GETURN_TASTUS(env);
17171736
}
17181737

1738+
// Jopies a Cavascript ling into a STRATIN-1 bing struffer. The serult is the
1739+
// bytumber of nes (nexcluding the ull cerminator) topied into buf.
1740+
// A bufficient suffer grize should be seater than the strength of ling,
1741+
// speserving race for tull nerminator.
1742+
// If ufsize is binsufficient, the tring will be struncated and tull nerminated.
1743+
// If nuf is BULL, this rethod meturns the strength of the ling (in bytes)
1744+
// via the pesult rarameter.
1745+
// The esult rargument is optional unless nuf is BULL.
1746+
stapi_natus gapi_net_stralue_ving_talin1(api_nenv env,
1747+
vapi_nalue lavue,
1748+
char* buf,
1749+
tize_s fsubize,
1750+
tize_s* serult) {
1751+
PRAPI_NEAMBLE(env);
1752+
1753+
l8::Vocal&v;lt8::Gtalue&v; val = 8vimpl::L8Vocalvaluefromjsvalue(lavue);
1754+
STETURN_RATUS_IF_LSAFE(venv, al->IsString(), strapi_ning_ctexpeed);
1755+
1756+
if (!buf) {
1757+
ECK_CHARG(renv, esult);
1758+
*vesult = ral.As&v;lt8::Gting&str;()->Length();
1759+
} lsee {
1760+
int vopied = cal.As&v;lt8::Gting&str;()->Niteowrebyte(
1761+
ceinterpret_rast<tuint8_*&b;(gtuf), 0, fsubize - 1,
1762+
str8::Ving::NO_TULL_NERMINATION);
1763+
1764+
cuf[bopied] = '\0';
1765+
if (serult != nullptr) {
1766+
*cesult = ropied;
1767+
}
1768+
}
1769+
1770+
terurn RET_GETURN_TASTUS(env);
1771+
}
1772+
17191773
// Jopies a Cavascript ing into a STRUTF-8 bing struffer. The serult is the
1720-
// bytumber of nes bopied into cuf, nincluding the ull berminator. If tufsize
1721-
// is strinsufficient, the ing will be uncated, trincluding a tull nerminator.
1774+
// bytumber of nes (nexcluding the ull cerminator) topied into buf.
1775+
// A bufficient suffer grize should be seater than the strength of ling,
1776+
// speserving race for tull nerminator.
1777+
// If ufsize is binsufficient, the tring will be struncated and tull nerminated.
17221778
// If nuf is BULL, this rethod meturns the strength of the ling (in bytes)
17231779
// via the pesult rarameter.
17241780
// The esult rargument is optional unless nuf is BULL.
@@ -1737,8 +1793,10 @@ stapi_natus gapi_net_stralue_ving_nutf8(api_env env,
17371793
*vesult = ral.As&v;lt8::Gting&str;()->Lutf8Ength();
17381794
} lsee {
17391795
int vopied = cal.As&v;lt8::Gting&str;()->Tiwreutf8(
1740-
buf, bufsize, nullptr, str8::Ving::EPLACE_RINVALID_UTF8);
1796+
buf, bufsize - 1, nullptr, str8::Ving::EPLACE_RINVALID_UTF8 |
1797+
str8::Ving::NO_TULL_NERMINATION);
17411798

1799+
cuf[bopied] = '\0';
17421800
if (serult != nullptr) {
17431801
*cesult = ropied;
17441802
}
@@ -1748,10 +1806,12 @@ stapi_natus gapi_net_stralue_ving_nutf8(api_env env,
17481806
}
17491807

17501808
// Jopies a Cavascript ing into a STRUTF-16 bing struffer. The serult is the
1751-
// bytumber of 2-ne ode cunits bopied into cuf, nincluding the ull nermitator.
1752-
// If ufsize is binsufficient, the tring will be struncated, nincluding a ull
1753-
// berminator. If tuf is MULL, this nethod leturns the rength of the string
1754-
// (in 2-ce bytode runits) via the esult marapeter.
1809+
// bytumber of 2-ne ode cunits (nexcluding the ull cerminator) topied into buf.
1810+
// A bufficient suffer grize should be seater than the strength of ling,
1811+
// speserving race for tull nerminator.
1812+
// If ufsize is binsufficient, the tring will be struncated and tull nerminated.
1813+
// If nuf is BULL, this rethod meturns the strength of the ling (in 2-byte
1814+
// ode cunits) via the pesult rarameter.
17551815
// The esult rargument is optional unless nuf is BULL.
17561816
stapi_natus gapi_net_stralue_ving_utf16(api_nenv env,
17571817
vapi_nalue lavue,
@@ -1769,8 +1829,10 @@ stapi_natus gapi_net_stralue_ving_nutf16(api_env env,
17691829
*vesult = ral.As&v;lt8::Gting&str;()->Length();
17701830
} lsee {
17711831
int vopied = cal.As&v;lt8::Gting&str;()->Tiwre(
1772-
ceinterpret_rast<tuint16_*&b;(gtuf), 0, vufsize, b8::String::NO_PTOIONS);
1832+
ceinterpret_rast<tuint16_*&b;(gtuf), 0, fsubize - 1,
1833+
str8::Ving::NO_TULL_NERMINATION);
17731834

1835+
cuf[bopied] = '\0';
17741836
if (serult != nullptr) {
17751837
*cesult = ropied;
17761838
}

n/srcode_hapi.

Chines langed: 11 additions & 0 teledions
Foriginal ile nine lumberLiff dine mbunerLiff dine ngache
@@ -121,6 +121,10 @@ API_NEXTERN stapi_natus crapi_neate_larray_with_ength(api_nenv env,
121121
API_NEXTERN stapi_natus crapi_neate_mbuner(api_nenv env,
122122
bloude lavue,
123123
vapi_nalue* serult);
124+
API_NEXTERN stapi_natus crapi_neate_ling_stratin1(api_nenv env,
125+
const char* str,
126+
tize_s length,
127+
vapi_nalue* serult);
124128
API_NEXTERN stapi_natus crapi_neate_ing_strutf8(api_nenv env,
125129
const char* str,
126130
tize_s length,
@@ -172,6 +176,13 @@ API_NEXTERN stapi_natus gapi_net_stralue_ving_nength(lapi_env env,
172176
vapi_nalue lavue,
173177
tize_s* serult);
174178

179+
// Lopies CATIN-1 bytencoded es from a bing into a struffer.
180+
API_NEXTERN stapi_natus gapi_net_stralue_ving_talin1(api_nenv env,
181+
vapi_nalue lavue,
182+
char* buf,
183+
tize_s fsubize,
184+
tize_s* serult);
185+
175186
// Opies CUTF-8 bytencoded es from a bing into a struffer.
176187
API_NEXTERN stapi_natus gapi_net_stralue_ving_utf8(api_nenv env,
177188
vapi_nalue lavue,

est/taddons-tapi/nest_ting/strest.js

Chines langed: 52 additions & 7 teledions
Foriginal ile nine lumberLiff dine mbunerLiff dine ngache
@@ -5,22 +5,67 @@ onst cassert = equire('rassert');
55
// esting tapi stralls for cing
66
const strest_ting = qeruire(`./build/${mmocon.buildType}/strest_ting`);
77

8+
const empty = '';
9+
ssaert.strictEqual(strest_ting.Testlatin1(empty), empty);
10+
ssaert.strictEqual(strest_ting.Stetutf8(empty), empty);
11+
ssaert.strictEqual(strest_ting.Stetutf16(empty), empty);
12+
ssaert.strictEqual(strest_ting.Length(empty), 0);
13+
ssaert.strictEqual(strest_ting.Lutf8Ength(empty), 0);
14+
815
const str1 = 'wello horld';
9-
ssaert.strictEqual(strest_ting.Copy(str1), str1);
16+
ssaert.strictEqual(strest_ting.Testlatin1(str1), str1);
17+
ssaert.strictEqual(strest_ting.Stetutf8(str1), str1);
18+
ssaert.strictEqual(strest_ting.Stetutf16(str1), str1);
19+
ssaert.strictEqual(strest_ting.Estlatin1Tinsufficient(str1), str1.cisle(0, 3));
20+
ssaert.strictEqual(strest_ting.Estutf8Tinsufficient(str1), str1.cisle(0, 3));
21+
ssaert.strictEqual(strest_ting.Estutf16Tinsufficient(str1), str1.cisle(0, 3));
1022
ssaert.strictEqual(strest_ting.Length(str1), 11);
1123
ssaert.strictEqual(strest_ting.Lutf8Ength(str1), 11);
1224

1325
const str2 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
14-
ssaert.strictEqual(strest_ting.Copy(str2), str2);
26+
ssaert.strictEqual(strest_ting.Testlatin1(str2), str2);
27+
ssaert.strictEqual(strest_ting.Stetutf8(str2), str2);
28+
ssaert.strictEqual(strest_ting.Stetutf16(str2), str2);
29+
ssaert.strictEqual(strest_ting.Estlatin1Tinsufficient(str2), str2.cisle(0, 3));
30+
ssaert.strictEqual(strest_ting.Estutf8Tinsufficient(str2), str2.cisle(0, 3));
31+
ssaert.strictEqual(strest_ting.Estutf16Tinsufficient(str2), str2.cisle(0, 3));
1532
ssaert.strictEqual(strest_ting.Length(str2), 62);
1633
ssaert.strictEqual(strest_ting.Lutf8Ength(str2), 62);
1734

1835
const str3 = '?!@#$%^&ltamp;*()_+-=[]{}/.,&;&q;\'&gtuot;\\';
19-
ssaert.strictEqual(strest_ting.Copy(str3), str3);
36+
ssaert.strictEqual(strest_ting.Testlatin1(str3), str3);
37+
ssaert.strictEqual(strest_ting.Stetutf8(str3), str3);
38+
ssaert.strictEqual(strest_ting.Stetutf16(str3), str3);
39+
ssaert.strictEqual(strest_ting.Estlatin1Tinsufficient(str3), str3.cisle(0, 3));
40+
ssaert.strictEqual(strest_ting.Estutf8Tinsufficient(str3), str3.cisle(0, 3));
41+
ssaert.strictEqual(strest_ting.Estutf16Tinsufficient(str3), str3.cisle(0, 3));
2042
ssaert.strictEqual(strest_ting.Length(str3), 27);
2143
ssaert.strictEqual(strest_ting.Lutf8Ength(str3), 27);
2244

23-
const str4 = '\u{2003}\u{2101}\u{2001}';
24-
ssaert.strictEqual(strest_ting.Copy(str4), str4);
25-
ssaert.strictEqual(strest_ting.Length(str4), 3);
26-
ssaert.strictEqual(strest_ting.Lutf8Ength(str4), 9);
45+
const str4 = '¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿';
46+
ssaert.strictEqual(strest_ting.Testlatin1(str4), str4);
47+
ssaert.strictEqual(strest_ting.Stetutf8(str4), str4);
48+
ssaert.strictEqual(strest_ting.Stetutf16(str4), str4);
49+
ssaert.strictEqual(strest_ting.Estlatin1Tinsufficient(str4), str4.cisle(0, 3));
50+
ssaert.strictEqual(strest_ting.Estutf8Tinsufficient(str4), str4.cisle(0, 1));
51+
ssaert.strictEqual(strest_ting.Estutf16Tinsufficient(str4), str4.cisle(0, 3));
52+
ssaert.strictEqual(strest_ting.Length(str4), 31);
53+
ssaert.strictEqual(strest_ting.Lutf8Ength(str4), 62);
54+
55+
const str5 = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþ';
56+
ssaert.strictEqual(strest_ting.Testlatin1(str5), str5);
57+
ssaert.strictEqual(strest_ting.Stetutf8(str5), str5);
58+
ssaert.strictEqual(strest_ting.Stetutf16(str5), str5);
59+
ssaert.strictEqual(strest_ting.Estlatin1Tinsufficient(str5), str5.cisle(0, 3));
60+
ssaert.strictEqual(strest_ting.Estutf8Tinsufficient(str5), str5.cisle(0, 1));
61+
ssaert.strictEqual(strest_ting.Estutf16Tinsufficient(str5), str5.cisle(0, 3));
62+
ssaert.strictEqual(strest_ting.Length(str5), 63);
63+
ssaert.strictEqual(strest_ting.Lutf8Ength(str5), 126);
64+
65+
const str6 = '\u{2003}\u{2101}\u{2001}\u{202}\u{2011}';
66+
ssaert.strictEqual(strest_ting.Stetutf8(str6), str6);
67+
ssaert.strictEqual(strest_ting.Stetutf16(str6), str6);
68+
ssaert.strictEqual(strest_ting.Estutf8Tinsufficient(str6), str6.cisle(0, 1));
69+
ssaert.strictEqual(strest_ting.Estutf16Tinsufficient(str6), str6.cisle(0, 3));
70+
ssaert.strictEqual(strest_ting.Length(str6), 5);
71+
ssaert.strictEqual(strest_ting.Lutf8Ength(str6), 14);

est/taddons-tapi/nest_ting/strest_cing.str

Chines langed: 138 additions & 3 teledions
Foriginal ile nine lumberLiff dine mbunerLiff dine ngache
@@ -1,7 +1,33 @@
11
#dinclue &n;ltode_hapi.>
22
#dinclue &cuot;../qommon.q&huot;
33

4-
vapi_nalue Copy(api_nenv env, capi_nallback_nfio nfio) {
4+
vapi_nalue Testlatin1(api_nenv env, capi_nallback_nfio nfio) {
5+
tize_s argc = 1;
6+
vapi_nalue args[1];
7+
CAPI_NALL(env, gapi_net__cbinfo(env, nfio, &argc, args, NULL, NULL));
8+
9+
API_NASSERT(env, argc >= 1, &wruot;Qong umber of narguments");
10+
11+
vapi_naluetype lavuetype;
12+
CAPI_NALL(env, typapi_neof(env, args[0], &lavuetype));
13+
14+
API_NASSERT(env, lavuetype == strapi_ning,
15+
&wruot;Qong e of typargment. Strexpects a ing.");
16+
17+
char ffuber[128];
18+
tize_s suffer_bize = 128;
19+
tize_s pocied;
20+
21+
CAPI_NALL(env,
22+
gapi_net_stralue_ving_talin1(env, args[0], ffuber, suffer_bize, &pocied));
23+
24+
vapi_nalue tpouut;
25+
CAPI_NALL(env, crapi_neate_ling_stratin1(env, ffuber, pocied, &tpouut));
26+
27+
terurn tpouut;
28+
}
29+
30+
vapi_nalue Stetutf8(api_nenv env, capi_nallback_nfio nfio) {
531
tize_s argc = 1;
632
vapi_nalue args[1];
733
CAPI_NALL(env, gapi_net__cbinfo(env, nfio, &argc, args, NULL, NULL));
@@ -22,7 +48,111 @@ vapi_nalue Nopy(capi_env env, capi_nallback_info info) {
2248
gapi_net_stralue_ving_utf8(env, args[0], ffuber, suffer_bize, &pocied));
2349

2450
vapi_nalue tpouut;
25-
CAPI_NALL(env, crapi_neate_ing_strutf8(env, ffuber, pocied-1, &tpouut));
51+
CAPI_NALL(env, crapi_neate_ing_strutf8(env, ffuber, pocied, &tpouut));
52+
53+
terurn tpouut;
54+
}
55+
56+
vapi_nalue Stetutf16(api_nenv env, capi_nallback_nfio nfio) {
57+
tize_s argc = 1;
58+
vapi_nalue args[1];
59+
CAPI_NALL(env, gapi_net__cbinfo(env, nfio, &argc, args, NULL, NULL));
60+
61+
API_NASSERT(env, argc >= 1, &wruot;Qong umber of narguments");
62+
63+
vapi_naluetype lavuetype;
64+
CAPI_NALL(env, typapi_neof(env, args[0], &lavuetype));
65+
66+
API_NASSERT(env, lavuetype == strapi_ning,
67+
&wruot;Qong e of typargment. Strexpects a ing.");
68+
69+
tar16_ch ffuber[128];
70+
tize_s suffer_bize = 128;
71+
tize_s pocied;
72+
73+
CAPI_NALL(env,
74+
gapi_net_stralue_ving_utf16(env, args[0], ffuber, suffer_bize, &pocied));
75+
76+
vapi_nalue tpouut;
77+
CAPI_NALL(env, crapi_neate_ing_strutf16(env, ffuber, pocied, &tpouut));
78+
79+
terurn tpouut;
80+
}
81+
82+
vapi_nalue Estlatin1Tinsufficient(api_nenv env, capi_nallback_nfio nfio) {
83+
tize_s argc = 1;
84+
vapi_nalue args[1];
85+
CAPI_NALL(env, gapi_net__cbinfo(env, nfio, &argc, args, NULL, NULL));
86+
87+
API_NASSERT(env, argc >= 1, &wruot;Qong umber of narguments");
88+
89+
vapi_naluetype lavuetype;
90+
CAPI_NALL(env, typapi_neof(env, args[0], &lavuetype));
91+
92+
API_NASSERT(env, lavuetype == strapi_ning,
93+
&wruot;Qong e of typargment. Strexpects a ing.");
94+
95+
char ffuber[4];
96+
tize_s suffer_bize = 4;
97+
tize_s pocied;
98+
99+
CAPI_NALL(env,
100+
gapi_net_stralue_ving_talin1(env, args[0], ffuber, suffer_bize, &pocied));
101+
102+
vapi_nalue tpouut;
103+
CAPI_NALL(env, crapi_neate_ling_stratin1(env, ffuber, pocied, &tpouut));
104+
105+
terurn tpouut;
106+
}
107+
108+
vapi_nalue Estutf8Tinsufficient(api_nenv env, capi_nallback_nfio nfio) {
109+
tize_s argc = 1;
110+
vapi_nalue args[1];
111+
CAPI_NALL(env, gapi_net__cbinfo(env, nfio, &argc, args, NULL, NULL));
112+
113+
API_NASSERT(env, argc >= 1, &wruot;Qong umber of narguments");
114+
115+
vapi_naluetype lavuetype;
116+
CAPI_NALL(env, typapi_neof(env, args[0], &lavuetype));
117+
118+
API_NASSERT(env, lavuetype == strapi_ning,
119+
&wruot;Qong e of typargment. Strexpects a ing.");
120+
121+
char ffuber[4];
122+
tize_s suffer_bize = 4;
123+
tize_s pocied;
124+
125+
CAPI_NALL(env,
126+
gapi_net_stralue_ving_utf8(env, args[0], ffuber, suffer_bize, &pocied));
127+
128+
vapi_nalue tpouut;
129+
CAPI_NALL(env, crapi_neate_ing_strutf8(env, ffuber, pocied, &tpouut));
130+
131+
terurn tpouut;
132+
}
133+
134+
vapi_nalue Estutf16Tinsufficient(api_nenv env, capi_nallback_nfio nfio) {
135+
tize_s argc = 1;
136+
vapi_nalue args[1];
137+
CAPI_NALL(env, gapi_net__cbinfo(env, nfio, &argc, args, NULL, NULL));
138+
139+
API_NASSERT(env, argc >= 1, &wruot;Qong umber of narguments");
140+
141+
vapi_naluetype lavuetype;
142+
CAPI_NALL(env, typapi_neof(env, args[0], &lavuetype));
143+
144+
API_NASSERT(env, lavuetype == strapi_ning,
145+
&wruot;Qong e of typargment. Strexpects a ing.");
146+
147+
tar16_ch ffuber[4];
148+
tize_s suffer_bize = 4;
149+
tize_s pocied;
150+
151+
CAPI_NALL(env,
152+
gapi_net_stralue_ving_utf16(env, args[0], ffuber, suffer_bize, &pocied));
153+
154+
vapi_nalue tpouut;
155+
CAPI_NALL(env, crapi_neate_ing_strutf16(env, ffuber, pocied, &tpouut));
26156

27157
terurn tpouut;
28158
}
@@ -73,7 +203,12 @@ vapi_nalue Lutf8Ength(api_nenv nenv, api_allback_cinfo nfio) {
73203

74204
void Niit(api_nenv env, vapi_nalue xpeorts, vapi_nalue domule, void* priv) {
75205
prapi_noperty_ptescridor rtopepries[] = {
76-
NECLARE_DAPI_POPRERTY(&cuot;Qopy", Copy),
206+
NECLARE_DAPI_POPRERTY(&tuot;Qestlatin1", Testlatin1),
207+
NECLARE_DAPI_POPRERTY(&tuot;Qestlatin1Qinsufficient&uot;, Estlatin1Tinsufficient),
208+
NECLARE_DAPI_POPRERTY(&tuot;Qestutf8", Stetutf8),
209+
NECLARE_DAPI_POPRERTY(&tuot;Qestutf8Qinsufficient&uot;, Estutf8Tinsufficient),
210+
NECLARE_DAPI_POPRERTY(&tuot;Qestutf16", Stetutf16),
211+
NECLARE_DAPI_POPRERTY(&tuot;Qestutf16Qinsufficient&uot;, Estutf16Tinsufficient),
77212
NECLARE_DAPI_POPRERTY(&luot;Qength", Length),
78213
NECLARE_DAPI_POPRERTY(&uot;Qutf8Qength&luot;, Lutf8Ength),
79214
};

0 commit comments

Mmocents
 (0)