summaryrefslogtreecommitdiff
path: root/src/classlibnative/nls/nlsinfo.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/classlibnative/nls/nlsinfo.cpp')
-rw-r--r--src/classlibnative/nls/nlsinfo.cpp81
1 files changed, 12 insertions, 69 deletions
diff --git a/src/classlibnative/nls/nlsinfo.cpp b/src/classlibnative/nls/nlsinfo.cpp
index 507a18b221..da565e5fdd 100644
--- a/src/classlibnative/nls/nlsinfo.cpp
+++ b/src/classlibnative/nls/nlsinfo.cpp
@@ -307,70 +307,6 @@ BOOL QCALLTYPE COMNlsInfo::InternalGetUserDefaultUILanguage(QCall::StringHandleO
return result;
}
-// Added but disabled from desktop in .NET 4.0, stayed disabled in .NET 4.5
-FCIMPL0(Object*, COMNlsInfo::nativeGetResourceFallbackArray)
-{
- CONTRACTL
- {
- FCALL_CHECK;
- } CONTRACTL_END;
-
- DWORD dwFlags = MUI_MERGE_USER_FALLBACK | MUI_MERGE_SYSTEM_FALLBACK;
- ULONG cchLanguagesBuffer = 0;
- ULONG ulNumLanguages = 0;
- BOOL result = FALSE;
-
- struct _gc
- {
- PTRARRAYREF resourceFallbackArray;
- } gc;
-
- gc.resourceFallbackArray = NULL;
-
- // If the resource lookups we're planning on doing are going to be written to a non-Unicode console,
- // then we should ideally only return languages that can be displayed correctly on the console. The
- // trick is guessing at whether we're writing this data to the console, which we can't do well.
- // Instead, we ask new apps to call GetConsoleFallbackUICulture & fall back to en-US.
- bool disableUserFallback;
- BEGIN_SO_INTOLERANT_CODE_NOTHROW(GetThread(), FCThrow(kStackOverflowException));
- disableUserFallback = CLRConfig::GetConfigValue(CLRConfig::EXTERNAL_Resources_DisableUserPreferredFallback) == 1
- END_SO_INTOLERANT_CODE;
-
- if (disableUserFallback)
- return NULL;
-
- HELPER_METHOD_FRAME_BEGIN_RET_PROTECT(gc);
-
- // first call with null buffer to get size
- result = NewApis::GetThreadPreferredUILanguages(dwFlags, &ulNumLanguages, NULL, &cchLanguagesBuffer);
- if (cchLanguagesBuffer > 0)
- {
- NewArrayHolder<WCHAR> stringBuffer = new (nothrow) WCHAR[cchLanguagesBuffer];
- if (stringBuffer != NULL)
- {
- result = NewApis::GetThreadPreferredUILanguages(dwFlags, &ulNumLanguages, stringBuffer, &cchLanguagesBuffer);
- _ASSERTE(result);
-
- // now string into strings
- gc.resourceFallbackArray = (PTRARRAYREF) AllocateObjectArray(ulNumLanguages, g_pStringClass);
-
- LPCWSTR buffer = stringBuffer; // Restart @ buffer beginning
- for(DWORD i = 0; i < ulNumLanguages; i++)
- {
- OBJECTREF o = (OBJECTREF) StringObject::NewString(buffer);
- gc.resourceFallbackArray->SetAt(i, o);
- buffer += (lstrlenW(buffer) + 1);
- }
- }
- }
-
- HELPER_METHOD_FRAME_END();
-
- return OBJECTREFToObject(gc.resourceFallbackArray);
-
-}
-FCIMPLEND
-
INT32 COMNlsInfo::CallGetUserDefaultUILanguage()
{
CONTRACTL
@@ -2452,7 +2388,8 @@ int QCALLTYPE COMNlsInfo::InternalFindNLSStringEx(
__in int cchSource, // number of characters lpStringSource after sourceIndex
__in int sourceIndex, // index from where the search will start in lpStringSource
__in_ecount(cchValue) LPCWSTR lpStringValue, // the string we search for
- __in int cchValue) // length of the string we search for
+ __in int cchValue, // length of the string we search for
+ __out_opt LPINT pcchFound) // length of the string we found in source
{
CONTRACTL {
QCALL_CHECK;
@@ -2496,7 +2433,8 @@ int QCALLTYPE COMNlsInfo::InternalFindNLSStringEx(
lpStringValue,
cchValue,
dwFindNLSStringFlags & FIND_NLS_STRING_FLAGS_NEGATION,
- dwFindNLSStringFlags & FIND_ENDSWITH);
+ dwFindNLSStringFlags & FIND_ENDSWITH,
+ pcchFound);
if (retValue >= 0)
{
retValue += sourceIndex - cchSource + 1;
@@ -2511,7 +2449,8 @@ int QCALLTYPE COMNlsInfo::InternalFindNLSStringEx(
lpStringValue,
cchValue,
dwFindNLSStringFlags & FIND_NLS_STRING_FLAGS_NEGATION,
- dwFindNLSStringFlags & FIND_STARTSWITH);
+ dwFindNLSStringFlags & FIND_STARTSWITH,
+ pcchFound);
if (retValue >= 0)
{
@@ -2530,7 +2469,9 @@ int QCALLTYPE COMNlsInfo::InternalFindNLSStringEx(
&lpStringSource[sourceIndex - cchSource + 1],
cchSource,
lpStringValue,
- cchValue, NULL, NULL, NULL, (LPARAM) handle);
+ cchValue,
+ pcchFound,
+ NULL, NULL, (LPARAM) handle);
}
if (retValue >= 0)
@@ -2547,7 +2488,9 @@ int QCALLTYPE COMNlsInfo::InternalFindNLSStringEx(
&lpStringSource[sourceIndex],
cchSource,
lpStringValue,
- cchValue, NULL, NULL, NULL, (LPARAM) handle);
+ cchValue,
+ pcchFound,
+ NULL, NULL, (LPARAM) handle);
}
if (retValue >= 0)