MCPcopy Create free account
hub / github.com/abbeycode/UnrarKit / WideToUtf

Function WideToUtf

Libraries/unrar/unicode.cpp:255–294  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

253
254
255void WideToUtf(const wchar *Src,char *Dest,size_t DestSize)
256{
257 long dsize=(long)DestSize;
258 dsize--;
259 while (*Src!=0 && --dsize>=0)
260 {
261 uint c=*(Src++);
262 if (c<0x80)
263 *(Dest++)=c;
264 else
265 if (c<0x800 && --dsize>=0)
266 {
267 *(Dest++)=(0xc0|(c>>6));
268 *(Dest++)=(0x80|(c&0x3f));
269 }
270 else
271 {
272 if (c>=0xd800 && c<=0xdbff && *Src>=0xdc00 && *Src<=0xdfff) // Surrogate pair.
273 {
274 c=((c-0xd800)<<10)+(*Src-0xdc00)+0x10000;
275 Src++;
276 }
277 if (c<0x10000 && (dsize-=2)>=0)
278 {
279 *(Dest++)=(0xe0|(c>>12));
280 *(Dest++)=(0x80|((c>>6)&0x3f));
281 *(Dest++)=(0x80|(c&0x3f));
282 }
283 else
284 if (c < 0x200000 && (dsize-=3)>=0)
285 {
286 *(Dest++)=(0xf0|(c>>18));
287 *(Dest++)=(0x80|((c>>12)&0x3f));
288 *(Dest++)=(0x80|((c>>6)&0x3f));
289 *(Dest++)=(0x80|(c&0x3f));
290 }
291 }
292 }
293 *Dest=0;
294}
295
296
297size_t WideToUtfSize(const wchar *Src)

Callers 3

cvt_wprintfFunction · 0.85
SetKey50Method · 0.85
WideToCharFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected