diff options
Diffstat (limited to 'src/mscorlib/corefx/System/Globalization/IdnMapping.Windows.cs')
-rw-r--r-- | src/mscorlib/corefx/System/Globalization/IdnMapping.Windows.cs | 113 |
1 files changed, 0 insertions, 113 deletions
diff --git a/src/mscorlib/corefx/System/Globalization/IdnMapping.Windows.cs b/src/mscorlib/corefx/System/Globalization/IdnMapping.Windows.cs deleted file mode 100644 index 3d3292e3db..0000000000 --- a/src/mscorlib/corefx/System/Globalization/IdnMapping.Windows.cs +++ /dev/null @@ -1,113 +0,0 @@ -// 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. - -using System.Diagnostics; -using System.Runtime.InteropServices; - -namespace System.Globalization -{ - public sealed partial class IdnMapping - { - private unsafe string GetAsciiCore(char* unicode, int count) - { - uint flags = Flags; - - // Determine the required length - int length = Interop.mincore.IdnToAscii(flags, new IntPtr(unicode), count, IntPtr.Zero, 0); - if (length == 0) - { - ThrowForZeroLength(nameof(unicode), SR.Argument_IdnIllegalName, SR.Argument_InvalidCharSequenceNoIndex); - } - - // Do the conversion - const int StackAllocThreshold = 512; // arbitrary limit to switch from stack to heap allocation - if (length < StackAllocThreshold) - { - char* output = stackalloc char[length]; - return GetAsciiCore(unicode, count, flags, output, length); - } - else - { - char[] output = new char[length]; - fixed (char* pOutput = output) - { - return GetAsciiCore(unicode, count, flags, pOutput, length); - } - } - } - - private unsafe string GetAsciiCore(char* unicode, int count, uint flags, char* output, int outputLength) - { - int length = Interop.mincore.IdnToAscii(flags, new IntPtr(unicode), count, new IntPtr(output), outputLength); - if (length == 0) - { - ThrowForZeroLength(nameof(unicode), SR.Argument_IdnIllegalName, SR.Argument_InvalidCharSequenceNoIndex); - } - Debug.Assert(length == outputLength); - return new string(output, 0, length); - } - - private unsafe string GetUnicodeCore(char* ascii, int count) - { - uint flags = Flags; - - // Determine the required length - int length = Interop.mincore.IdnToUnicode(flags, new IntPtr(ascii), count, IntPtr.Zero, 0); - if (length == 0) - { - ThrowForZeroLength(nameof(ascii), SR.Argument_IdnIllegalName, SR.Argument_IdnBadPunycode); - } - - // Do the conversion - const int StackAllocThreshold = 512; // arbitrary limit to switch from stack to heap allocation - if (length < StackAllocThreshold) - { - char* output = stackalloc char[length]; - return GetUnicodeCore(ascii, count, flags, output, length); - } - else - { - char[] output = new char[length]; - fixed (char* pOutput = output) - { - return GetUnicodeCore(ascii, count, flags, pOutput, length); - } - } - } - - private unsafe string GetUnicodeCore(char* ascii, int count, uint flags, char* output, int outputLength) - { - int length = Interop.mincore.IdnToUnicode(flags, new IntPtr(ascii), count, new IntPtr(output), outputLength); - if (length == 0) - { - ThrowForZeroLength(nameof(ascii), SR.Argument_IdnIllegalName, SR.Argument_IdnBadPunycode); - } - Debug.Assert(length == outputLength); - return new string(output, 0, length); - } - - // ----------------------------- - // ---- PAL layer ends here ---- - // ----------------------------- - - private uint Flags - { - get - { - int flags = - (AllowUnassigned ? Interop.mincore.IDN_ALLOW_UNASSIGNED : 0) | - (UseStd3AsciiRules ? Interop.mincore.IDN_USE_STD3_ASCII_RULES : 0); - return (uint)flags; - } - } - - private static void ThrowForZeroLength(string paramName, string invalidNameString, string otherString) - { - throw new ArgumentException( - Marshal.GetLastWin32Error() == Interop.ERROR_INVALID_NAME ? invalidNameString : otherString, - paramName); - } - } -} - |