From 4b4aad7217d3292650e77eec2cf4c198ea9c3b4b Mon Sep 17 00:00:00 2001 From: Jiyoung Yun Date: Wed, 23 Nov 2016 19:09:09 +0900 Subject: Imported Upstream version 1.1.0 --- .../src/System/Text/DecoderExceptionFallback.cs | 155 +++++++++++++++++++++ 1 file changed, 155 insertions(+) create mode 100644 src/mscorlib/src/System/Text/DecoderExceptionFallback.cs (limited to 'src/mscorlib/src/System/Text/DecoderExceptionFallback.cs') diff --git a/src/mscorlib/src/System/Text/DecoderExceptionFallback.cs b/src/mscorlib/src/System/Text/DecoderExceptionFallback.cs new file mode 100644 index 0000000000..7a0478de20 --- /dev/null +++ b/src/mscorlib/src/System/Text/DecoderExceptionFallback.cs @@ -0,0 +1,155 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace System.Text +{ + using System; + using System.Runtime.Serialization; + using System.Globalization; + + [Serializable] + public sealed class DecoderExceptionFallback : DecoderFallback + { + // Construction + public DecoderExceptionFallback() + { + } + + public override DecoderFallbackBuffer CreateFallbackBuffer() + { + return new DecoderExceptionFallbackBuffer(); + } + + // Maximum number of characters that this instance of this fallback could return + public override int MaxCharCount + { + get + { + return 0; + } + } + + public override bool Equals(Object value) + { + DecoderExceptionFallback that = value as DecoderExceptionFallback; + if (that != null) + { + return (true); + } + return (false); + } + + public override int GetHashCode() + { + return 879; + } + } + + + public sealed class DecoderExceptionFallbackBuffer : DecoderFallbackBuffer + { + public override bool Fallback(byte[] bytesUnknown, int index) + { + Throw(bytesUnknown, index); + return true; + } + + public override char GetNextChar() + { + return (char)0; + } + + public override bool MovePrevious() + { + // Exception fallback doesn't have anywhere to back up to. + return false; + } + + // Exceptions are always empty + public override int Remaining + { + get + { + return 0; + } + } + + private void Throw(byte[] bytesUnknown, int index) + { + // Create a string representation of our bytes. + StringBuilder strBytes = new StringBuilder(bytesUnknown.Length * 3); + + int i; + for (i = 0; i < bytesUnknown.Length && i < 20; i++) + { + strBytes.Append("["); + strBytes.Append(bytesUnknown[i].ToString("X2", CultureInfo.InvariantCulture)); + strBytes.Append("]"); + } + + // In case the string's really long + if (i == 20) + strBytes.Append(" ..."); + + // Known index + throw new DecoderFallbackException( + Environment.GetResourceString("Argument_InvalidCodePageBytesIndex", + strBytes, index), bytesUnknown, index); + } + + } + + // Exception for decoding unknown byte sequences. + [Serializable] + public sealed class DecoderFallbackException : ArgumentException + { + byte[] bytesUnknown = null; + int index = 0; + + public DecoderFallbackException() + : base(Environment.GetResourceString("Arg_ArgumentException")) + { + SetErrorCode(__HResults.COR_E_ARGUMENT); + } + + public DecoderFallbackException(String message) + : base(message) + { + SetErrorCode(__HResults.COR_E_ARGUMENT); + } + + public DecoderFallbackException(String message, Exception innerException) + : base(message, innerException) + { + SetErrorCode(__HResults.COR_E_ARGUMENT); + } + + internal DecoderFallbackException(SerializationInfo info, StreamingContext context) : base(info, context) + { + } + + public DecoderFallbackException( + String message, byte[] bytesUnknown, int index) : base(message) + { + this.bytesUnknown = bytesUnknown; + this.index = index; + } + + public byte[] BytesUnknown + { + get + { + return (bytesUnknown); + } + } + + public int Index + { + get + { + return this.index; + } + } + } +} -- cgit v1.2.3