Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- INT WINAPI DECLSPEC_HOTPATCH ResolveLocaleName( const WCHAR *locale, WCHAR *buffer, INT cchLocaleName )
- {
- WCHAR name[LOCALE_NAME_MAX_LENGTH];
- if (locale == LOCALE_NAME_USER_DEFAULT) return GetUserDefaultLocaleName( buffer, cchLocaleName );
- lstrcpynW( name, locale, LOCALE_NAME_MAX_LENGTH );
- for (;;)
- {
- WCHAR neutral[3];
- WCHAR* p;
- LCID lcid = LocaleNameToLCID( name, LOCALE_ALLOW_NEUTRAL_NAMES );
- if (lcid != LOCALE_CUSTOM_UNSPECIFIED && lcid > 0 && GetLocaleInfoEx( name, LOCALE_INEUTRAL, neutral, 3 ) == 2)
- {
- if (neutral[ 0 ] == '1')
- {
- /* Attempt to get default locale from neutral locale */
- lcid = MAKELCID( MAKELANGID(lcid, SUBLANG_DEFAULT), SORT_DEFAULT );
- return GetLocaleInfoW( lcid, LOCALE_SNAME, buffer, cchLocaleName );
- }
- else
- {
- /* Found a valid non-neutral locale */
- int len = lstrlenW( name ) + 1u;
- if (buffer && cchLocaleName < len )
- {
- SetLastError( ERROR_INSUFFICIENT_BUFFER );
- return 0;
- }
- if (buffer) lstrcpynW( buffer, name, len );
- return len;
- }
- }
- if (p = wcsrchr( name, L'_' ))
- {
- *p = 0;
- continue;
- }
- else
- {
- /* Not dealing with modifiers; check for & remove script e.g. en-Latn-IE -> en-IE */
- int delim = 0;
- for (p = name; *p != 0; ++p) if ( *p == L'-' ) ++delim;
- if ( delim == 2)
- {
- wchar_t* from;
- wchar_t* to;
- from = wcsrchr( name, L'-' ) + 1;
- to = wcschr( name, L'-' ) + 1;
- while (*from != 0) *(to++) = *(from++);
- *to = 0;
- continue;
- }
- else if (((p = wcsrchr( name, L'-' ))))
- {
- *p = 0;
- continue;
- }
- break;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement