474 {
476 bool flag = false;
480 DecoderReplacementFallback decoderReplacementFallback = null;
481 if (decoder == null)
482 {
483 decoderReplacementFallback = base.DecoderFallback as DecoderReplacementFallback;
484 flag = base.DecoderFallback is InternalDecoderBestFitFallback;
485 }
486 else
487 {
488 decoderReplacementFallback = decoder.Fallback as DecoderReplacementFallback;
489 flag = decoder.Fallback is InternalDecoderBestFitFallback;
490 }
491 if (flag || (decoderReplacementFallback != null && decoderReplacementFallback.MaxCharCount == 1))
492 {
493 char c = decoderReplacementFallback?.DefaultString[0] ?? '?';
495 {
498 }
500 {
501 char c2;
502 if (flag)
503 {
505 {
507 }
509 }
510 else
511 {
513 }
515 if (c2 == '\ufffd')
516 {
518 }
519 else
520 {
522 }
524 }
525 if (decoder != null)
526 {
527 decoder.m_bytesUsed = (int)(
bytes - ptr2);
528 }
529 return (
int)(
chars - ptr3);
530 }
531 DecoderFallbackBuffer decoderFallbackBuffer = null;
532 byte[]
array =
new byte[1];
534 DecoderFallbackBufferHelper decoderFallbackBufferHelper = new DecoderFallbackBufferHelper(null);
536 {
539 if (c3 == '\ufffd')
540 {
541 if (decoderFallbackBuffer == null)
542 {
544 decoderFallbackBufferHelper = new DecoderFallbackBufferHelper(decoderFallbackBuffer);
545 decoderFallbackBufferHelper.InternalInitialize(ptr -
byteCount, ptr4);
546 }
548 if (!decoderFallbackBufferHelper.InternalFallback(
array,
bytes, ref
chars))
549 {
551 decoderFallbackBufferHelper.InternalReset();
553 break;
554 }
555 }
556 else
557 {
559 {
562 break;
563 }
566 }
567 }
568 if (decoder != null)
569 {
570 decoder.m_bytesUsed = (int)(
bytes - ptr2);
571 }
572 return (
int)(
chars - ptr3);
573 }
void CheckMemorySection()
new DecoderFallbackBuffer FallbackBuffer
void ThrowCharsOverflow()
DecoderFallback DecoderFallback
unsafe char * _mapBytesToUnicode
unsafe override void ReadBestFitTable()