diff --git a/src/libraries/System.Private.CoreLib/Tools/GenUnicodeProp/Updating-Unicode-Versions.md b/src/libraries/System.Private.CoreLib/Tools/GenUnicodeProp/Updating-Unicode-Versions.md index 7a9087f4134e6..f545d810ccdfa 100644 --- a/src/libraries/System.Private.CoreLib/Tools/GenUnicodeProp/Updating-Unicode-Versions.md +++ b/src/libraries/System.Private.CoreLib/Tools/GenUnicodeProp/Updating-Unicode-Versions.md @@ -41,7 +41,15 @@ This should be done automatically by dependency-flow, so in theory there shouldn - System.Globalization.Tests.csproj - System.Globalization.Nls.Tests.csproj - System.Text.Encodings.Web.Tests.csproj -4. If the new Unicode data contains casing changes/updates, then we will also need to update `src/native/minipal/UnicodeDataGenerator/unicodedata.c` file. This file is used by most of the reflection stack whenever you specify the `BindingFlags.IgnoreCase`. In order to regenerate the contents of the `unicdedata.c` file, you need to run the Program located at `src/native/minipal/UnicodeDataGenerator/unicodedata.cs` and give a full path to the new UnicodeData.txt as a parameter. +4. If the new Unicode data contains casing changes/updates, then we will also need to update `src/native/minipal/unicodedata.c` file. This file is used by most of the reflection stack whenever you specify the `BindingFlags.IgnoreCase`. In order to regenerate the contents of the `unicdedata.c` file, you need to run the Program located at `src/native/minipal/UnicodeDataGenerator/unicodedata.cs` and give a full path to the new UnicodeData.txt as a parameter. e.g. in Unix shell: + ```sh + # download UnicodeData.txt + $ curl -sSLo /tmp/UnicodeData.txt https://www.unicode.org/Public/14.0.0/ucd/UnicodeData.txt + + # update unicodedata.c + $ cd runtime + $ ./dotnet.sh run --project src/native/minipal/UnicodeDataGenerator /tmp/UnicodeData.txt > src/native/minipal/unicodedata.c + ``` 5. Update the Regex casing equivalence table using the UnicodeData.txt file from the new Unicode version. You can find the instructions on how to do this [here](../../../System.Text.RegularExpressions/tools/Readme.md). 6. Finally, last step is to update the license for the Unicode data into our [Third party notices](../../../../../THIRD-PARTY-NOTICES.TXT) by copying the contents located in `https://www.unicode.org/license.html` to the section that has the Unicode license in our notices. 7. That's it, now commit all of the changed files, and send a PR into dotnet/runtime with the updates. If there were any special things you had to do that are not noted on this document, PLEASE UPDATE THESE INSTRUCTIONS to facilitate future updates. diff --git a/src/native/minipal/UnicodeDataGenerator/Program.cs b/src/native/minipal/UnicodeDataGenerator/Program.cs index f4611ef26454f..f98c6ea31f919 100644 --- a/src/native/minipal/UnicodeDataGenerator/Program.cs +++ b/src/native/minipal/UnicodeDataGenerator/Program.cs @@ -7,8 +7,7 @@ using System.IO; using System.Linq; -Console.WriteLine(@" -// Licensed to the .NET Foundation under one or more agreements. +Console.WriteLine(@"// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // @@ -16,8 +15,9 @@ // IF YOU NEED TO UPDATE UNICODE VERSION FOLLOW THE GUIDE AT src/libraries/System.Private.CoreLib/Tools/GenUnicodeProp/Updating-Unicode-Versions.md // -#include #include +#include +#include typedef struct { @@ -71,7 +71,7 @@ typedef struct #define UNICODE_DATA_SIZE {numberOfCases}"); Console.WriteLine(@" -static int UnicodeDataComp(const void *opposingCode, const void *elem) +static int LIBC_CALLBACK UnicodeDataComp(const void *opposingCode, const void *elem) { CHAR16_T code = ((UnicodeDataRec*)elem)->code; diff --git a/src/native/minipal/unicodedata.c b/src/native/minipal/unicodedata.c index 18c1d02139723..e38aba8f553f7 100644 --- a/src/native/minipal/unicodedata.c +++ b/src/native/minipal/unicodedata.c @@ -1,4 +1,3 @@ - // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. @@ -7,8 +6,9 @@ // IF YOU NEED TO UPDATE UNICODE VERSION FOLLOW THE GUIDE AT src/libraries/System.Private.CoreLib/Tools/GenUnicodeProp/Updating-Unicode-Versions.md // -#include #include +#include +#include typedef struct { @@ -2385,7 +2385,7 @@ static const UnicodeDataRec UnicodeData[] = #define UNICODE_DATA_SIZE 2359 -static int UnicodeDataComp(const void *opposingCode, const void *elem) +static int LIBC_CALLBACK UnicodeDataComp(const void *opposingCode, const void *elem) { CHAR16_T code = ((UnicodeDataRec*)elem)->code; diff --git a/src/native/minipal/utils.h b/src/native/minipal/utils.h index ef840a529f48f..768de9e48b4b2 100644 --- a/src/native/minipal/utils.h +++ b/src/native/minipal/utils.h @@ -32,6 +32,12 @@ # define FALLTHROUGH #endif +#if defined(_MSC_VER) +#define LIBC_CALLBACK __cdecl +#else +#define LIBC_CALLBACK +#endif + #if defined(_MSC_VER) # if defined(__SANITIZE_ADDRESS__) # define HAS_ADDRESS_SANITIZER