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

Function UtfToWide

Libraries/unrar/unicode.cpp:324–396  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

322
323
324bool UtfToWide(const char *Src,wchar *Dest,size_t DestSize)
325{
326 bool Success=true;
327 long dsize=(long)DestSize;
328 dsize--;
329 while (*Src!=0)
330 {
331 uint c=byte(*(Src++)),d;
332 if (c<0x80)
333 d=c;
334 else
335 if ((c>>5)==6)
336 {
337 if ((*Src&0xc0)!=0x80)
338 {
339 Success=false;
340 break;
341 }
342 d=((c&0x1f)<<6)|(*Src&0x3f);
343 Src++;
344 }
345 else
346 if ((c>>4)==14)
347 {
348 if ((Src[0]&0xc0)!=0x80 || (Src[1]&0xc0)!=0x80)
349 {
350 Success=false;
351 break;
352 }
353 d=((c&0xf)<<12)|((Src[0]&0x3f)<<6)|(Src[1]&0x3f);
354 Src+=2;
355 }
356 else
357 if ((c>>3)==30)
358 {
359 if ((Src[0]&0xc0)!=0x80 || (Src[1]&0xc0)!=0x80 || (Src[2]&0xc0)!=0x80)
360 {
361 Success=false;
362 break;
363 }
364 d=((c&7)<<18)|((Src[0]&0x3f)<<12)|((Src[1]&0x3f)<<6)|(Src[2]&0x3f);
365 Src+=3;
366 }
367 else
368 {
369 Success=false;
370 break;
371 }
372 if (--dsize<0)
373 break;
374 if (d>0xffff)
375 {
376 if (--dsize<0)
377 break;
378 if (d>0x10ffff) // UTF-8 must end at 0x10ffff according to RFC 3629.
379 {
380 Success=false;
381 continue;

Callers 7

ArcCharToWideFunction · 0.85
ReadTextFileFunction · 0.85
ReadHeader50Method · 0.85
ProcessExtra50Method · 0.85
ReadCommentDataMethod · 0.85
CharToWideFunction · 0.85
GetStreamNameNTFSFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected