diff options
Diffstat (limited to 'src/classlibnative/nls/nlsinfo.cpp')
-rw-r--r-- | src/classlibnative/nls/nlsinfo.cpp | 81 |
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) |