ReactOS 0.4.16-dev-976-g18fc5a1
locale.c File Reference
#include <k32.h>
#include <debug.h>
#include "lcformat_private.h"
Include dependency graph for locale.c:

Go to the source code of this file.

Classes

struct  locale_name
 
struct  registry_value
 
struct  enum_locale_ex_data
 
struct  ENUMLANGUAGEGROUP_CALLBACKS
 
struct  ENUMLANGUAGEGROUPLOCALE_CALLBACKS
 
struct  ENUM_UILANG_CALLBACK
 
struct  geoinfo_t
 

Macros

#define NDEBUG
 
#define WINVER   DLL_EXPORT_VERSION
 
#define LOCALE_NAME_USER_DEFAULT   NULL
 
#define REG_SZ   1
 
#define NLSRC_OFFSET   5000 /* FIXME */
 
#define LOCALE_LOCALEINFOFLAGSMASK
 
#define MB_FLAGSMASK   (MB_PRECOMPOSED|MB_COMPOSITE|MB_USEGLYPHCHARS|MB_ERR_INVALID_CHARS)
 
#define WC_FLAGSMASK
 
#define GET_UNIX_LOCALE(cat)
 

Enumerations

enum  locationkind { LOCATION_NATION = 0 , LOCATION_REGION , LOCATION_BOTH }
 
enum  {
  BASE = 36 , TMIN = 1 , TMAX = 26 , SKEW = 38 ,
  DAMP = 700 , INIT_BIAS = 72 , INIT_N = 128
}
 

Functions

 DEBUG_CHANNEL (nls)
 
INT WINAPI CompareStringEx (LPCWSTR locale, DWORD flags, LPCWSTR str1, INT len1, LPCWSTR str2, INT len2, LPNLSVERSIONINFO version, LPVOID reserved, LPARAM lParam)
 
int wine_fold_string (int flags, const WCHAR *src, int srclen, WCHAR *dst, int dstlen)
 
int wine_get_sortkey (int flags, const WCHAR *src, int srclen, char *dst, int dstlen)
 
int wine_compare_string (int flags, const WCHAR *str1, int len1, const WCHAR *str2, int len2)
 
UINT GetLocalisedText (IN UINT uID, IN LPWSTR lpszDest, IN UINT cchDest)
 
static void strcpynAtoW (WCHAR *dst, const char *src, size_t n)
 
static unsigned short get_table_entry (const unsigned short *table, WCHAR ch)
 
static UINT get_lcid_codepage (LCID lcid)
 
static const union cptableget_codepage_table (unsigned int codepage)
 
static LANGID get_default_sublang (LANGID lang)
 
static LCID convert_default_lcid (LCID lcid, LCTYPE lctype)
 
static BOOL is_genitive_name_supported (LCTYPE lctype)
 
static HANDLE create_registry_key (void)
 
static BOOL locale_update_registry (HKEY hkey, const WCHAR *name, LCID lcid, const LCTYPE *values, UINT nb_values)
 
void LOCALE_InitRegistry (void)
 
static const charget_locale (int category, const char *category_name)
 
static UINT setup_unix_locales (void)
 
LANGID WINAPI GetUserDefaultLangID (void)
 
LANGID WINAPI GetSystemDefaultLangID (void)
 
LCID WINAPI GetUserDefaultLCID (void)
 
LCID WINAPI GetSystemDefaultLCID (void)
 
INT WINAPI GetSystemDefaultLocaleName (LPWSTR localename, INT len)
 
static BOOL get_dummy_preferred_ui_language (DWORD flags, ULONG *count, WCHAR *buffer, ULONG *size)
 
BOOL WINAPI GetSystemPreferredUILanguages (DWORD flags, ULONG *count, WCHAR *buffer, ULONG *size)
 
BOOL WINAPI SetThreadPreferredUILanguages (DWORD flags, PCZZWSTR buffer, PULONG count)
 
BOOL WINAPI GetThreadPreferredUILanguages (DWORD flags, ULONG *count, WCHAR *buf, ULONG *size)
 
LANGID WINAPI GetUserDefaultUILanguage (void)
 
LANGID WINAPI GetSystemDefaultUILanguage (void)
 
static struct registry_valueget_locale_registry_value (DWORD lctype)
 
static INT get_registry_locale_info (struct registry_value *registry_value, LPWSTR buffer, INT len)
 
INT WINAPI GetLocaleInfoA (LCID lcid, LCTYPE lctype, LPSTR buffer, INT len)
 
static int get_value_base_by_lctype (LCTYPE lctype)
 
INT WINAPI GetLocaleInfoW (LCID lcid, LCTYPE lctype, LPWSTR buffer, INT len)
 
BOOL WINAPI SetLocaleInfoA (LCID lcid, LCTYPE lctype, LPCSTR data)
 
BOOL WINAPI SetLocaleInfoW (LCID lcid, LCTYPE lctype, LPCWSTR data)
 
UINT WINAPI GetACP (void)
 
UINT WINAPI SetCPGlobal (UINT acp)
 
UINT WINAPI GetOEMCP (void)
 
BOOL WINAPI IsValidCodePage (UINT codepage)
 
BOOL WINAPI IsDBCSLeadByteEx (UINT codepage, BYTE testchar)
 
BOOL WINAPI IsDBCSLeadByte (BYTE testchar)
 
BOOL WINAPI GetCPInfo (UINT codepage, LPCPINFO cpinfo)
 
BOOL WINAPI GetCPInfoExA (UINT codepage, DWORD dwFlags, LPCPINFOEXA cpinfo)
 
BOOL WINAPI GetCPInfoExW (UINT codepage, DWORD dwFlags, LPCPINFOEXW cpinfo)
 
BOOL WINAPI EnumSystemCodePagesA (CODEPAGE_ENUMPROCA lpfnCodePageEnum, DWORD flags)
 
BOOL WINAPI EnumSystemCodePagesW (CODEPAGE_ENUMPROCW lpfnCodePageEnum, DWORD flags)
 
static BOOL utf7_write_w (WCHAR *dst, int dstlen, int *index, WCHAR character)
 
static int utf7_mbstowcs (const char *src, int srclen, WCHAR *dst, int dstlen)
 
INT WINAPI MultiByteToWideChar (UINT page, DWORD flags, LPCSTR src, INT srclen, LPWSTR dst, INT dstlen)
 
static BOOL utf7_can_directly_encode (WCHAR codepoint)
 
static BOOL utf7_write_c (char *dst, int dstlen, int *index, char character)
 
static int utf7_wcstombs (const WCHAR *src, int srclen, char *dst, int dstlen)
 
INT WINAPI WideCharToMultiByte (UINT page, DWORD flags, LPCWSTR src, INT srclen, LPSTR dst, INT dstlen, LPCSTR defchar, BOOL *used)
 
LCID WINAPI GetThreadLocale (void)
 
BOOL WINAPI SetThreadLocale (LCID lcid)
 
LANGID WINAPI SetThreadUILanguage (LANGID langid)
 
LCID WINAPI ConvertDefaultLocale (LCID lcid)
 
BOOL WINAPI IsValidLocale (LCID lcid, DWORD flags)
 
BOOL WINAPI IsValidLocaleName (LPCWSTR locale)
 
static BOOL CALLBACK enum_lang_proc_a (HMODULE hModule, LPCSTR type, LPCSTR name, WORD LangID, LONG_PTR lParam)
 
static BOOL CALLBACK enum_lang_proc_w (HMODULE hModule, LPCWSTR type, LPCWSTR name, WORD LangID, LONG_PTR lParam)
 
BOOL WINAPI EnumSystemLocalesA (LOCALE_ENUMPROCA lpfnLocaleEnum, DWORD dwFlags)
 
BOOL WINAPI EnumSystemLocalesW (LOCALE_ENUMPROCW lpfnLocaleEnum, DWORD dwFlags)
 
static BOOL CALLBACK enum_locale_ex_proc (HMODULE module, LPCWSTR type, LPCWSTR name, WORD lang, LONG_PTR lparam)
 
BOOL WINAPI EnumSystemLocalesEx (LOCALE_ENUMPROCEX proc, DWORD flags, LPARAM lparam, LPVOID reserved)
 
DWORD WINAPI VerLanguageNameA (DWORD wLang, LPSTR szLang, DWORD nSize)
 
DWORD WINAPI VerLanguageNameW (DWORD wLang, LPWSTR szLang, DWORD nSize)
 
BOOL WINAPI GetStringTypeW (DWORD type, LPCWSTR src, INT count, LPWORD chartype)
 
BOOL WINAPI GetStringTypeExW (LCID locale, DWORD type, LPCWSTR src, INT count, LPWORD chartype)
 
BOOL WINAPI GetStringTypeA (LCID locale, DWORD type, LPCSTR src, INT count, LPWORD chartype)
 
BOOL WINAPI GetStringTypeExA (LCID locale, DWORD type, LPCSTR src, INT count, LPWORD chartype)
 
INT WINAPI LCMapStringEx (LPCWSTR locale, DWORD flags, LPCWSTR src, INT srclen, LPWSTR dst, INT dstlen, LPNLSVERSIONINFO version, LPVOID reserved, LPARAM handle)
 
INT WINAPI LCMapStringW (LCID lcid, DWORD flags, LPCWSTR src, INT srclen, LPWSTR dst, INT dstlen)
 
INT WINAPI LCMapStringA (LCID lcid, DWORD flags, LPCSTR src, INT srclen, LPSTR dst, INT dstlen)
 
INT WINAPI FoldStringA (DWORD dwFlags, LPCSTR src, INT srclen, LPSTR dst, INT dstlen)
 
INT WINAPI FoldStringW (DWORD dwFlags, LPCWSTR src, INT srclen, LPWSTR dst, INT dstlen)
 
INT WINAPI CompareStringW (LCID lcid, DWORD flags, LPCWSTR str1, INT len1, LPCWSTR str2, INT len2)
 
INT WINAPI CompareStringA (LCID lcid, DWORD flags, LPCSTR str1, INT len1, LPCSTR str2, INT len2)
 
int WINAPI lstrcmpA (LPCSTR str1, LPCSTR str2)
 
int WINAPI lstrcmpiA (LPCSTR str1, LPCSTR str2)
 
int WINAPI lstrcmpW (LPCWSTR str1, LPCWSTR str2)
 
int WINAPI lstrcmpiW (LPCWSTR str1, LPCWSTR str2)
 
void LOCALE_Init (void)
 
static HANDLE NLS_RegOpenKey (HANDLE hRootKey, LPCWSTR szKeyName)
 
static BOOL NLS_RegEnumValue (HANDLE hKey, UINT ulIndex, LPWSTR szValueName, ULONG valueNameSize, LPWSTR szValueData, ULONG valueDataSize)
 
static BOOL NLS_RegGetDword (HANDLE hKey, LPCWSTR szValueName, DWORD *lpVal)
 
static BOOL NLS_GetLanguageGroupName (LGRPID lgrpid, LPWSTR szName, ULONG nameSize)
 
static BOOL NLS_EnumSystemLanguageGroups (ENUMLANGUAGEGROUP_CALLBACKS *lpProcs)
 
BOOL WINAPI EnumSystemLanguageGroupsA (LANGUAGEGROUP_ENUMPROCA pLangGrpEnumProc, DWORD dwFlags, LONG_PTR lParam)
 
BOOL WINAPI EnumSystemLanguageGroupsW (LANGUAGEGROUP_ENUMPROCW pLangGrpEnumProc, DWORD dwFlags, LONG_PTR lParam)
 
BOOL WINAPI IsValidLanguageGroup (LGRPID lgrpid, DWORD dwFlags)
 
static BOOL NLS_EnumLanguageGroupLocales (ENUMLANGUAGEGROUPLOCALE_CALLBACKS *lpProcs)
 
BOOL WINAPI EnumLanguageGroupLocalesA (LANGGROUPLOCALE_ENUMPROCA pLangGrpLcEnumProc, LGRPID lgrpid, DWORD dwFlags, LONG_PTR lParam)
 
BOOL WINAPI EnumLanguageGroupLocalesW (LANGGROUPLOCALE_ENUMPROCW pLangGrpLcEnumProc, LGRPID lgrpid, DWORD dwFlags, LONG_PTR lParam)
 
BOOL WINAPI InvalidateNLSCache (void)
 
GEOID WINAPI GetUserGeoID (GEOCLASS GeoClass)
 
BOOL WINAPI SetUserGeoID (GEOID GeoID)
 
static BOOL CALLBACK enum_uilang_proc_a (HMODULE hModule, LPCSTR type, LPCSTR name, WORD LangID, LONG_PTR lParam)
 
static BOOL CALLBACK enum_uilang_proc_w (HMODULE hModule, LPCWSTR type, LPCWSTR name, WORD LangID, LONG_PTR lParam)
 
BOOL WINAPI EnumUILanguagesA (UILANGUAGE_ENUMPROCA pUILangEnumProc, DWORD dwFlags, LONG_PTR lParam)
 
BOOL WINAPI EnumUILanguagesW (UILANGUAGE_ENUMPROCW pUILangEnumProc, DWORD dwFlags, LONG_PTR lParam)
 
static const struct geoinfo_tget_geoinfo_dataptr (GEOID geoid)
 
INT WINAPI GetGeoInfoW (GEOID geoid, GEOTYPE geotype, LPWSTR data, int data_len, LANGID lang)
 
INT WINAPI GetGeoInfoA (GEOID geoid, GEOTYPE geotype, LPSTR data, int data_len, LANGID lang)
 
BOOL WINAPI EnumSystemGeoID (GEOCLASS geoclass, GEOID parent, GEO_ENUMPROC enumproc)
 
INT WINAPI GetUserDefaultLocaleName (LPWSTR localename, int buffersize)
 
INT WINAPI NormalizeString (NORM_FORM NormForm, LPCWSTR lpSrcString, INT cwSrcLength, LPWSTR lpDstString, INT cwDstLength)
 
BOOL WINAPI IsNormalizedString (NORM_FORM NormForm, LPCWSTR lpString, INT cwLength)
 
static INT adapt (INT delta, INT numpoints, BOOL firsttime)
 
INT WINAPI IdnToAscii (DWORD dwFlags, LPCWSTR lpUnicodeCharStr, INT cchUnicodeChar, LPWSTR lpASCIICharStr, INT cchASCIIChar)
 
INT WINAPI IdnToNameprepUnicode (DWORD dwFlags, LPCWSTR lpUnicodeCharStr, INT cchUnicodeChar, LPWSTR lpNameprepCharStr, INT cchNameprepChar)
 
INT WINAPI IdnToUnicode (DWORD dwFlags, LPCWSTR lpASCIICharStr, INT cchASCIIChar, LPWSTR lpUnicodeCharStr, INT cchUnicodeChar)
 
BOOL WINAPI GetFileMUIPath (DWORD flags, PCWSTR filepath, PWSTR language, PULONG languagelen, PWSTR muipath, PULONG muipathlen, PULONGLONG enumerator)
 
BOOL WINAPI GetFileMUIInfo (DWORD flags, PCWSTR path, FILEMUIINFO *info, DWORD *size)
 
INT WINAPI ResolveLocaleName (LPCWSTR name, LPWSTR localename, INT len)
 

Variables

HMODULE kernel32_handle
 
static const union cptableansi_cptable
 
static const union cptableoem_cptable
 
static const union cptablemac_cptable
 
static const union cptableunix_cptable
 
static const WCHAR szLocaleKeyName []
 
static const WCHAR szLangGroupsKeyName []
 
static LCID lcid_LC_COLLATE
 
static LCID lcid_LC_CTYPE
 
static LCID lcid_LC_MESSAGES
 
static LCID lcid_LC_MONETARY
 
static LCID lcid_LC_NUMERIC
 
static LCID lcid_LC_TIME
 
static LCID lcid_LC_PAPER
 
static LCID lcid_LC_MEASUREMENT
 
static LCID lcid_LC_TELEPHONE
 
static const WCHAR iCalendarTypeW [] = {'i','C','a','l','e','n','d','a','r','T','y','p','e',0}
 
static const WCHAR iCountryW [] = {'i','C','o','u','n','t','r','y',0}
 
static const WCHAR iCurrDigitsW [] = {'i','C','u','r','r','D','i','g','i','t','s',0}
 
static const WCHAR iCurrencyW [] = {'i','C','u','r','r','e','n','c','y',0}
 
static const WCHAR iDateW [] = {'i','D','a','t','e',0}
 
static const WCHAR iDigitsW [] = {'i','D','i','g','i','t','s',0}
 
static const WCHAR iFirstDayOfWeekW [] = {'i','F','i','r','s','t','D','a','y','O','f','W','e','e','k',0}
 
static const WCHAR iFirstWeekOfYearW [] = {'i','F','i','r','s','t','W','e','e','k','O','f','Y','e','a','r',0}
 
static const WCHAR iLDateW [] = {'i','L','D','a','t','e',0}
 
static const WCHAR iLZeroW [] = {'i','L','Z','e','r','o',0}
 
static const WCHAR iMeasureW [] = {'i','M','e','a','s','u','r','e',0}
 
static const WCHAR iNegCurrW [] = {'i','N','e','g','C','u','r','r',0}
 
static const WCHAR iNegNumberW [] = {'i','N','e','g','N','u','m','b','e','r',0}
 
static const WCHAR iPaperSizeW [] = {'i','P','a','p','e','r','S','i','z','e',0}
 
static const WCHAR iTLZeroW [] = {'i','T','L','Z','e','r','o',0}
 
static const WCHAR iTimePrefixW [] = {'i','T','i','m','e','P','r','e','f','i','x',0}
 
static const WCHAR iTimeW [] = {'i','T','i','m','e',0}
 
static const WCHAR s1159W [] = {'s','1','1','5','9',0}
 
static const WCHAR s2359W [] = {'s','2','3','5','9',0}
 
static const WCHAR sCountryW [] = {'s','C','o','u','n','t','r','y',0}
 
static const WCHAR sCurrencyW [] = {'s','C','u','r','r','e','n','c','y',0}
 
static const WCHAR sDateW [] = {'s','D','a','t','e',0}
 
static const WCHAR sDecimalW [] = {'s','D','e','c','i','m','a','l',0}
 
static const WCHAR sGroupingW [] = {'s','G','r','o','u','p','i','n','g',0}
 
static const WCHAR sLanguageW [] = {'s','L','a','n','g','u','a','g','e',0}
 
static const WCHAR sListW [] = {'s','L','i','s','t',0}
 
static const WCHAR sLongDateW [] = {'s','L','o','n','g','D','a','t','e',0}
 
static const WCHAR sMonDecimalSepW [] = {'s','M','o','n','D','e','c','i','m','a','l','S','e','p',0}
 
static const WCHAR sMonGroupingW [] = {'s','M','o','n','G','r','o','u','p','i','n','g',0}
 
static const WCHAR sMonThousandSepW [] = {'s','M','o','n','T','h','o','u','s','a','n','d','S','e','p',0}
 
static const WCHAR sNativeDigitsW [] = {'s','N','a','t','i','v','e','D','i','g','i','t','s',0}
 
static const WCHAR sNegativeSignW [] = {'s','N','e','g','a','t','i','v','e','S','i','g','n',0}
 
static const WCHAR sPositiveSignW [] = {'s','P','o','s','i','t','i','v','e','S','i','g','n',0}
 
static const WCHAR sShortDateW [] = {'s','S','h','o','r','t','D','a','t','e',0}
 
static const WCHAR sThousandW [] = {'s','T','h','o','u','s','a','n','d',0}
 
static const WCHAR sTimeFormatW [] = {'s','T','i','m','e','F','o','r','m','a','t',0}
 
static const WCHAR sTimeW [] = {'s','T','i','m','e',0}
 
static const WCHAR sYearMonthW [] = {'s','Y','e','a','r','M','o','n','t','h',0}
 
static const WCHAR NumShapeW [] = {'N','u','m','s','h','a','p','e',0}
 
static struct registry_value registry_values []
 
static RTL_CRITICAL_SECTION cache_section = { NULL, -1, 0, 0, 0, 0 }
 
static const struct geoinfo_t geoinfodata []
 

Macro Definition Documentation

◆ GET_UNIX_LOCALE

#define GET_UNIX_LOCALE (   cat)
Value:
do \
if ((locale = get_locale( cat, #cat ))) \
{ \
strcpynAtoW( buffer, locale, sizeof(buffer)/sizeof(WCHAR) ); \
if (!strcmpW( buffer, ctype_buff )) lcid_##cat = lcid_LC_CTYPE; \
else { \
parse_locale_name( buffer, &locale_name ); \
lcid_##cat = locale_name.lcid; \
TRACE( "got lcid %04x (%d matches) for " #cat "=%s\n", \
} \
} while (0)
static WCHAR * get_locale(void)
Definition: builtin.c:3937
Definition: _locale.h:75
static LCID lcid_LC_CTYPE
Definition: locale.c:162
GLuint buffer
Definition: glext.h:5915
#define debugstr_a
Definition: kernel32.h:31
#define strcmpW(s1, s2)
Definition: unicode.h:44
int matches
Definition: locale.c:156
LCID lcid
Definition: locale.c:155
__wchar_t WCHAR
Definition: xmlstorage.h:180

◆ LOCALE_LOCALEINFOFLAGSMASK

#define LOCALE_LOCALEINFOFLAGSMASK
Value:
LOCALE_RETURN_NUMBER|LOCALE_RETURN_GENITIVE_NAMES)
#define LOCALE_USE_CP_ACP
Definition: winnls.h:20
#define LOCALE_NOUSEROVERRIDE
Definition: winnls.h:19
#define LOCALE_RETURN_GENITIVE_NAMES
Definition: winnls.h:24

Definition at line 58 of file locale.c.

◆ LOCALE_NAME_USER_DEFAULT

#define LOCALE_NAME_USER_DEFAULT   NULL

Definition at line 43 of file locale.c.

◆ MB_FLAGSMASK

Definition at line 60 of file locale.c.

◆ NDEBUG

#define NDEBUG

Definition at line 26 of file locale.c.

◆ NLSRC_OFFSET

#define NLSRC_OFFSET   5000 /* FIXME */

Definition at line 54 of file locale.c.

◆ REG_SZ

#define REG_SZ   1

Definition at line 45 of file locale.c.

◆ WC_FLAGSMASK

#define WC_FLAGSMASK
Value:
#define WC_DEFAULTCHAR
Definition: unicode.h:45
#define WC_COMPOSITECHECK
Definition: unicode.h:43
#define WC_DISCARDNS
Definition: unicode.h:44
#define WC_ERR_INVALID_CHARS
Definition: unicode.h:47
#define WC_NO_BEST_FIT_CHARS
Definition: unicode.h:46
#define WC_SEPCHARS
Definition: winnls.h:221

Definition at line 61 of file locale.c.

◆ WINVER

#define WINVER   DLL_EXPORT_VERSION

Definition at line 40 of file locale.c.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
BASE 
TMIN 
TMAX 
SKEW 
DAMP 
INIT_BIAS 
INIT_N 

Definition at line 5677 of file locale.c.

5677 {
5678 BASE = 36,
5679 TMIN = 1,
5680 TMAX = 26,
5681 SKEW = 38,
5682 DAMP = 700,
5683 INIT_BIAS = 72,
5684 INIT_N = 128
5685};
@ INIT_N
Definition: locale.c:5684
@ DAMP
Definition: locale.c:5682
@ SKEW
Definition: locale.c:5681
@ BASE
Definition: locale.c:5678
@ TMIN
Definition: locale.c:5679
@ TMAX
Definition: locale.c:5680
@ INIT_BIAS
Definition: locale.c:5683

◆ locationkind

Enumerator
LOCATION_NATION 
LOCATION_REGION 
LOCATION_BOTH 

Definition at line 4999 of file locale.c.

4999 {
5000 LOCATION_NATION = 0,
5003};
@ LOCATION_REGION
Definition: locale.c:5001
@ LOCATION_BOTH
Definition: locale.c:5002
@ LOCATION_NATION
Definition: locale.c:5000

Function Documentation

◆ adapt()

static INT adapt ( INT  delta,
INT  numpoints,
BOOL  firsttime 
)
inlinestatic

Definition at line 5687 of file locale.c.

5688{
5689 INT k;
5690
5691 delta /= (firsttime ? DAMP : 2);
5692 delta += delta/numpoints;
5693
5694 for(k=0; delta>((BASE-TMIN)*TMAX)/2; k+=BASE)
5695 delta /= BASE-TMIN;
5696 return k+((BASE-TMIN+1)*delta)/(delta+SKEW);
5697}
int k
Definition: mpi.c:3369
int32_t INT
Definition: typedefs.h:58

Referenced by IdnToAscii(), and IdnToUnicode().

◆ CompareStringA()

INT WINAPI CompareStringA ( LCID  lcid,
DWORD  flags,
LPCSTR  str1,
INT  len1,
LPCSTR  str2,
INT  len2 
)

Definition at line 4083 of file locale.c.

4085{
4086 WCHAR *buf1W = NtCurrentTeb()->StaticUnicodeBuffer;
4087 WCHAR *buf2W = buf1W + 130;
4088 LPWSTR str1W, str2W;
4089 INT len1W = 0, len2W = 0, ret;
4090 UINT locale_cp = CP_ACP;
4091
4092 if (!str1 || !str2)
4093 {
4095 return 0;
4096 }
4097 if (len1 < 0) len1 = strlen(str1);
4098 if (len2 < 0) len2 = strlen(str2);
4099
4100 if (!(flags & LOCALE_USE_CP_ACP)) locale_cp = get_lcid_codepage( lcid );
4101
4102 if (len1)
4103 {
4104 if (len1 <= 130) len1W = MultiByteToWideChar(locale_cp, 0, str1, len1, buf1W, 130);
4105 if (len1W)
4106 str1W = buf1W;
4107 else
4108 {
4109 len1W = MultiByteToWideChar(locale_cp, 0, str1, len1, NULL, 0);
4110 str1W = HeapAlloc(GetProcessHeap(), 0, len1W * sizeof(WCHAR));
4111 if (!str1W)
4112 {
4114 return 0;
4115 }
4116 MultiByteToWideChar(locale_cp, 0, str1, len1, str1W, len1W);
4117 }
4118 }
4119 else
4120 {
4121 len1W = 0;
4122 str1W = buf1W;
4123 }
4124
4125 if (len2)
4126 {
4127 if (len2 <= 130) len2W = MultiByteToWideChar(locale_cp, 0, str2, len2, buf2W, 130);
4128 if (len2W)
4129 str2W = buf2W;
4130 else
4131 {
4132 len2W = MultiByteToWideChar(locale_cp, 0, str2, len2, NULL, 0);
4133 str2W = HeapAlloc(GetProcessHeap(), 0, len2W * sizeof(WCHAR));
4134 if (!str2W)
4135 {
4136 if (str1W != buf1W) HeapFree(GetProcessHeap(), 0, str1W);
4138 return 0;
4139 }
4140 MultiByteToWideChar(locale_cp, 0, str2, len2, str2W, len2W);
4141 }
4142 }
4143 else
4144 {
4145 len2W = 0;
4146 str2W = buf2W;
4147 }
4148
4149 ret = CompareStringEx(NULL, flags, str1W, len1W, str2W, len2W, NULL, NULL, 0);
4150
4151 if (str1W != buf1W) HeapFree(GetProcessHeap(), 0, str1W);
4152 if (str2W != buf2W) HeapFree(GetProcessHeap(), 0, str2W);
4153 return ret;
4154}
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
#define ERROR_NOT_ENOUGH_MEMORY
Definition: dderror.h:7
#define NULL
Definition: types.h:112
#define GetProcessHeap()
Definition: compat.h:736
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
#define CP_ACP
Definition: compat.h:109
#define SetLastError(x)
Definition: compat.h:752
#define HeapAlloc
Definition: compat.h:733
#define HeapFree(x, y, z)
Definition: compat.h:735
#define MultiByteToWideChar
Definition: compat.h:110
static UINT get_lcid_codepage(LCID lcid)
Definition: locale.c:288
INT WINAPI CompareStringEx(LPCWSTR locale, DWORD flags, LPCWSTR str1, INT len1, LPCWSTR str2, INT len2, LPNLSVERSIONINFO version, LPVOID reserved, LPARAM lParam)
Definition: locale.c:4023
GLbitfield flags
Definition: glext.h:7161
#define NtCurrentTeb
unsigned int UINT
Definition: ndis.h:50
int ret
WCHAR * LPWSTR
Definition: xmlstorage.h:184

Referenced by __crtCompareStringA(), _Locale_strcmp_auxA(), check_format(), COMCTL32_ChrCmpHelperA(), compare_line(), compare_string2(), FPropContainsProp(), get_env(), IntlStrEqWorkerA(), lstrcmpA(), lstrcmpiA(), SHLWAPI_ChrCmpHelperA(), StrCmpNA(), StrCmpNIA(), StrIsIntlEqualA(), test_CompareStringA(), test_encoders(), test_sh_new_link_info(), and UrlIsA().

◆ CompareStringEx()

INT WINAPI CompareStringEx ( LPCWSTR  locale,
DWORD  flags,
LPCWSTR  str1,
INT  len1,
LPCWSTR  str2,
INT  len2,
LPNLSVERSIONINFO  version,
LPVOID  reserved,
LPARAM  lParam 
)

Definition at line 4023 of file locale.c.

4025{
4028 DWORD semistub_flags = NORM_LINGUISTIC_CASING|LINGUISTIC_IGNORECASE|0x10000000;
4029 /* 0x10000000 is related to diacritics in Arabic, Japanese, and Hebrew */
4030 INT ret;
4031 static int once;
4032
4033 if (version) FIXME("unexpected version parameter\n");
4034 if (reserved) FIXME("unexpected reserved value\n");
4035 if (lParam) FIXME("unexpected lParam\n");
4036
4037 if (!str1 || !str2)
4038 {
4040 return 0;
4041 }
4042
4043 if (flags & ~(supported_flags|semistub_flags))
4044 {
4046 return 0;
4047 }
4048
4049 if (flags & semistub_flags)
4050 {
4051 if (!once++)
4052 FIXME("semi-stub behavior for flag(s) 0x%x\n", flags & semistub_flags);
4053 }
4054
4055 if (len1 < 0) len1 = strlenW(str1);
4056 if (len2 < 0) len2 = strlenW(str2);
4057
4058 ret = wine_compare_string(flags, str1, len1, str2, len2);
4059
4060 if (ret) /* need to translate result */
4061 return (ret < 0) ? CSTR_LESS_THAN : CSTR_GREATER_THAN;
4062 return CSTR_EQUAL;
4063}
#define FIXME(fmt,...)
Definition: precomp.h:53
LPARAM lParam
Definition: combotst.c:139
static const WCHAR version[]
Definition: asmname.c:66
int wine_compare_string(int flags, const WCHAR *str1, int len1, const WCHAR *str2, int len2)
Definition: sortkey.c:358
r reserved
Definition: btrfs.c:3006
unsigned long DWORD
Definition: ntddk_ex.h:95
#define strlenW(s)
Definition: unicode.h:34
#define ERROR_INVALID_FLAGS
Definition: winerror.h:583
#define NORM_IGNORECASE
Definition: winnls.h:178
#define SORT_STRINGSORT
Definition: winnls.h:185
#define LINGUISTIC_IGNORECASE
Definition: winnls.h:183
#define NORM_IGNOREKANATYPE
Definition: winnls.h:179
#define NORM_LINGUISTIC_CASING
Definition: winnls.h:184
#define CSTR_EQUAL
Definition: winnls.h:458
#define NORM_IGNORENONSPACE
Definition: winnls.h:180
#define NORM_IGNORESYMBOLS
Definition: winnls.h:181
#define NORM_IGNOREWIDTH
Definition: winnls.h:182
#define CSTR_LESS_THAN
Definition: winnls.h:457
#define CSTR_GREATER_THAN
Definition: winnls.h:459

Referenced by CompareStringA(), CompareStringW(), and InitFunctionPointers().

◆ CompareStringW()

◆ convert_default_lcid()

static LCID convert_default_lcid ( LCID  lcid,
LCTYPE  lctype 
)
static

Definition at line 587 of file locale.c.

588{
589 if (lcid == LOCALE_SYSTEM_DEFAULT ||
590 lcid == LOCALE_USER_DEFAULT ||
591 lcid == LOCALE_NEUTRAL)
592 {
593 LCID default_id = 0;
594
595 switch(lctype & 0xffff)
596 {
597 case LOCALE_SSORTNAME:
598 default_id = lcid_LC_COLLATE;
599 break;
600
604 case LOCALE_IDEFAULTEBCDICCODEPAGE:
607 default_id = lcid_LC_CTYPE;
608 break;
609
611 case LOCALE_ICURRENCY:
613 case LOCALE_INEGCURR:
620 case LOCALE_SCURRENCY:
625 case LOCALE_SNATIVECURRNAME:
626 default_id = lcid_LC_MONETARY;
627 break;
628
629 case LOCALE_IDIGITS:
630 case LOCALE_IDIGITSUBSTITUTION:
631 case LOCALE_ILZERO:
633 case LOCALE_SDECIMAL:
634 case LOCALE_SGROUPING:
635 //case LOCALE_SNAN:
638 //case LOCALE_SNEGINFINITY:
639 //case LOCALE_SPOSINFINITY:
641 case LOCALE_STHOUSAND:
642 default_id = lcid_LC_NUMERIC;
643 break;
644
646 case LOCALE_ICENTURY:
647 case LOCALE_IDATE:
648 case LOCALE_IDAYLZERO:
651 case LOCALE_ILDATE:
652 case LOCALE_IMONLZERO:
654 case LOCALE_ITIME:
656 case LOCALE_ITLZERO:
657 case LOCALE_S1159:
658 case LOCALE_S2359:
679 case LOCALE_SDATE:
680 case LOCALE_SDAYNAME1:
681 case LOCALE_SDAYNAME2:
682 case LOCALE_SDAYNAME3:
683 case LOCALE_SDAYNAME4:
684 case LOCALE_SDAYNAME5:
685 case LOCALE_SDAYNAME6:
686 case LOCALE_SDAYNAME7:
687 //case LOCALE_SDURATION:
688 case LOCALE_SLONGDATE:
703 //case LOCALE_SSHORTESTDAYNAME1:
704 //case LOCALE_SSHORTESTDAYNAME2:
705 //case LOCALE_SSHORTESTDAYNAME3:
706 //case LOCALE_SSHORTESTDAYNAME4:
707 //case LOCALE_SSHORTESTDAYNAME5:
708 //case LOCALE_SSHORTESTDAYNAME6:
709 //case LOCALE_SSHORTESTDAYNAME7:
710 case LOCALE_STIME:
712 case LOCALE_SYEARMONTH:
713 default_id = lcid_LC_TIME;
714 break;
715
716 case LOCALE_IPAPERSIZE:
717 default_id = lcid_LC_PAPER;
718 break;
719
720 case LOCALE_IMEASURE:
721 default_id = lcid_LC_MEASUREMENT;
722 break;
723
724 case LOCALE_ICOUNTRY:
725 default_id = lcid_LC_TELEPHONE;
726 break;
727 }
728 if (default_id) lcid = default_id;
729 }
730 return ConvertDefaultLocale( lcid );
731}
static LCID lcid_LC_MONETARY
Definition: locale.c:164
static LCID lcid_LC_TIME
Definition: locale.c:166
static LCID lcid_LC_NUMERIC
Definition: locale.c:165
static LCID lcid_LC_COLLATE
Definition: locale.c:161
static LCID lcid_LC_MEASUREMENT
Definition: locale.c:168
static LCID lcid_LC_TELEPHONE
Definition: locale.c:169
static LCID lcid_LC_PAPER
Definition: locale.c:167
LCID WINAPI ConvertDefaultLocale(LCID lcid)
Definition: locale.c:2877
#define LOCALE_NEUTRAL
#define LOCALE_USER_DEFAULT
#define LOCALE_SYSTEM_DEFAULT
DWORD LCID
Definition: nls.h:13
#define LOCALE_SABBREVMONTHNAME10
Definition: winnls.h:115
#define LOCALE_SMONTHNAME12
Definition: winnls.h:104
#define LOCALE_ICURRDIGITS
Definition: winnls.h:56
#define LOCALE_IDEFAULTCODEPAGE
Definition: winnls.h:39
#define LOCALE_SMONTHNAME5
Definition: winnls.h:97
#define LOCALE_SDATE
Definition: winnls.h:60
#define LOCALE_SDAYNAME5
Definition: winnls.h:83
#define LOCALE_SABBREVMONTHNAME9
Definition: winnls.h:114
#define LOCALE_SABBREVMONTHNAME11
Definition: winnls.h:116
#define LOCALE_SABBREVDAYNAME5
Definition: winnls.h:90
#define LOCALE_SABBREVDAYNAME2
Definition: winnls.h:87
#define LOCALE_INEGSEPBYSPACE
Definition: winnls.h:126
#define LOCALE_SABBREVMONTHNAME2
Definition: winnls.h:107
#define LOCALE_INEGSIGNPOSN
Definition: winnls.h:122
#define LOCALE_IDEFAULTUNIXCODEPAGE
Definition: winnls.h:176
#define LOCALE_SMONTHNAME13
Definition: winnls.h:105
#define LOCALE_SGROUPING
Definition: winnls.h:46
#define LOCALE_SMONTHNAME3
Definition: winnls.h:95
#define LOCALE_ICOUNTRY
Definition: winnls.h:31
#define LOCALE_SDECIMAL
Definition: winnls.h:44
#define LOCALE_SMONTHNAME11
Definition: winnls.h:103
#define LOCALE_SMONTHNAME8
Definition: winnls.h:100
#define LOCALE_IDATE
Definition: winnls.h:65
#define LOCALE_SMONTHNAME4
Definition: winnls.h:96
#define LOCALE_FONTSIGNATURE
Definition: winnls.h:127
#define LOCALE_SABBREVMONTHNAME13
Definition: winnls.h:118
#define LOCALE_IFIRSTWEEKOFYEAR
Definition: winnls.h:78
#define LOCALE_SDAYNAME1
Definition: winnls.h:79
#define LOCALE_IMEASURE
Definition: winnls.h:43
#define LOCALE_SLONGDATE
Definition: winnls.h:63
#define LOCALE_SMONTHNAME7
Definition: winnls.h:99
#define LOCALE_IINTLCURRDIGITS
Definition: winnls.h:57
#define LOCALE_S1159
Definition: winnls.h:73
#define LOCALE_SSHORTDATE
Definition: winnls.h:62
#define LOCALE_IPOSSYMPRECEDES
Definition: winnls.h:123
#define LOCALE_IDAYLZERO
Definition: winnls.h:71
#define LOCALE_SABBREVMONTHNAME4
Definition: winnls.h:109
#define LOCALE_SPOSITIVESIGN
Definition: winnls.h:119
#define LOCALE_SABBREVDAYNAME4
Definition: winnls.h:89
#define LOCALE_SMONDECIMALSEP
Definition: winnls.h:53
#define LOCALE_ITIME
Definition: winnls.h:67
#define LOCALE_ICURRENCY
Definition: winnls.h:58
#define LOCALE_SMONTHNAME1
Definition: winnls.h:93
#define LOCALE_SABBREVMONTHNAME3
Definition: winnls.h:108
#define LOCALE_ITLZERO
Definition: winnls.h:70
#define LOCALE_INEGSYMPRECEDES
Definition: winnls.h:125
#define LOCALE_SMONTHOUSANDSEP
Definition: winnls.h:54
#define LOCALE_SDAYNAME7
Definition: winnls.h:85
#define LOCALE_IPOSSIGNPOSN
Definition: winnls.h:121
#define LOCALE_SDAYNAME2
Definition: winnls.h:80
#define LOCALE_SABBREVMONTHNAME1
Definition: winnls.h:106
#define LOCALE_IOPTIONALCALENDAR
Definition: winnls.h:76
#define LOCALE_IDIGITS
Definition: winnls.h:47
#define LOCALE_STHOUSAND
Definition: winnls.h:45
#define LOCALE_IDEFAULTANSICODEPAGE
Definition: winnls.h:40
#define LOCALE_SABBREVDAYNAME6
Definition: winnls.h:91
#define LOCALE_SMONTHNAME2
Definition: winnls.h:94
#define LOCALE_STIMEFORMAT
Definition: winnls.h:64
#define LOCALE_SABBREVDAYNAME1
Definition: winnls.h:86
#define LOCALE_IFIRSTDAYOFWEEK
Definition: winnls.h:77
#define LOCALE_SABBREVMONTHNAME6
Definition: winnls.h:111
#define LOCALE_SMONTHNAME6
Definition: winnls.h:98
#define LOCALE_STIME
Definition: winnls.h:61
#define LOCALE_INEGNUMBER
Definition: winnls.h:49
#define LOCALE_SNEGATIVESIGN
Definition: winnls.h:120
#define LOCALE_SDAYNAME3
Definition: winnls.h:81
#define LOCALE_S2359
Definition: winnls.h:74
#define LOCALE_SNATIVEDIGITS
Definition: winnls.h:50
#define LOCALE_SABBREVDAYNAME3
Definition: winnls.h:88
#define LOCALE_ILZERO
Definition: winnls.h:48
#define LOCALE_SABBREVMONTHNAME5
Definition: winnls.h:110
#define LOCALE_SABBREVMONTHNAME7
Definition: winnls.h:112
#define LOCALE_ICALENDARTYPE
Definition: winnls.h:75
#define LOCALE_SINTLSYMBOL
Definition: winnls.h:52
#define LOCALE_SABBREVMONTHNAME8
Definition: winnls.h:113
#define LOCALE_SMONGROUPING
Definition: winnls.h:55
#define LOCALE_SDAYNAME4
Definition: winnls.h:82
#define LOCALE_SCURRENCY
Definition: winnls.h:51
#define LOCALE_SMONTHNAME10
Definition: winnls.h:102
#define LOCALE_INEGCURR
Definition: winnls.h:59
#define LOCALE_ILDATE
Definition: winnls.h:66
#define LOCALE_SMONTHNAME9
Definition: winnls.h:101
#define LOCALE_IPOSSEPBYSPACE
Definition: winnls.h:124
#define LOCALE_ICENTURY
Definition: winnls.h:69
#define LOCALE_IMONLZERO
Definition: winnls.h:72
#define LOCALE_SABBREVMONTHNAME12
Definition: winnls.h:117
#define LOCALE_IDEFAULTMACCODEPAGE
Definition: winnls.h:41
#define LOCALE_SDAYNAME6
Definition: winnls.h:84
#define LOCALE_ITIMEMARKPOSN
Definition: winnls.h:68
#define LOCALE_SABBREVDAYNAME7
Definition: winnls.h:92

Referenced by GetLocaleInfoW().

◆ ConvertDefaultLocale()

LCID WINAPI ConvertDefaultLocale ( LCID  lcid)

Definition at line 2877 of file locale.c.

2878{
2879 LANGID langid;
2880
2881 switch (lcid)
2882 {
2883 case LOCALE_INVARIANT:
2884 /* keep as-is */
2885 break;
2887 lcid = GetSystemDefaultLCID();
2888 break;
2890 case LOCALE_NEUTRAL:
2891 lcid = GetUserDefaultLCID();
2892 break;
2893 default:
2894 /* Replace SUBLANG_NEUTRAL with SUBLANG_DEFAULT */
2895 langid = LANGIDFROMLCID(lcid);
2897 {
2899 lcid = MAKELCID(langid, SORTIDFROMLCID(lcid));
2900 }
2901 }
2902 return lcid;
2903}
static LANGID get_default_sublang(LANGID lang)
Definition: locale.c:367
LCID WINAPI GetUserDefaultLCID(void)
Definition: locale.c:1211
LCID WINAPI GetSystemDefaultLCID(void)
Definition: locale.c:1230
USHORT LANGID
Definition: mui.h:9
LANGID langid
Definition: msctf.idl:644
#define LOCALE_INVARIANT
#define SORTIDFROMLCID(lcid)
#define MAKELCID(lgid, srtid)
#define SUBLANGID(l)
Definition: nls.h:17
#define LANGIDFROMLCID(l)
Definition: nls.h:18
#define SUBLANG_NEUTRAL
Definition: nls.h:167

Referenced by convert_default_lcid(), GetLocalisedText(), LHashValOfNameSysA(), NLS_IsUnicodeOnlyLcid(), ScriptRecordDigitSubstitution(), SetThreadLocale(), test_ConvertDefaultLocale(), VarBoolFromStr(), and VarBstrFromBool().

◆ create_registry_key()

static HANDLE create_registry_key ( void  )
inlinestatic

Definition at line 766 of file locale.c.

767{
768 static const WCHAR cplW[] = {'C','o','n','t','r','o','l',' ','P','a','n','e','l',0};
769 static const WCHAR intlW[] = {'I','n','t','e','r','n','a','t','i','o','n','a','l',0};
772 HANDLE cpl_key, hkey = 0;
773
774 if (RtlOpenCurrentUser( KEY_ALL_ACCESS, &hkey ) != STATUS_SUCCESS) return 0;
775
776 attr.Length = sizeof(attr);
777 attr.RootDirectory = hkey;
778 attr.ObjectName = &nameW;
779 attr.Attributes = 0;
780 attr.SecurityDescriptor = NULL;
781 attr.SecurityQualityOfService = NULL;
782 RtlInitUnicodeString( &nameW, cplW );
783
784 if (!NtCreateKey( &cpl_key, KEY_ALL_ACCESS, &attr, 0, NULL, 0, NULL ))
785 {
786 NtClose( attr.RootDirectory );
787 attr.RootDirectory = cpl_key;
788 RtlInitUnicodeString( &nameW, intlW );
789 if (NtCreateKey( &hkey, KEY_ALL_ACCESS, &attr, 0, NULL, 0, NULL )) hkey = 0;
790 }
791 NtClose( attr.RootDirectory );
792 return hkey;
793}
static const WCHAR nameW[]
Definition: main.c:49
NTSYSAPI NTSTATUS NTAPI RtlOpenCurrentUser(_In_ ACCESS_MASK DesiredAccess, _Out_ PHANDLE KeyHandle)
#define KEY_ALL_ACCESS
Definition: nt_native.h:1041
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
Definition: obhandle.c:3402
NTSTATUS NTAPI NtCreateKey(OUT PHANDLE KeyHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, IN ULONG TitleIndex, IN PUNICODE_STRING Class OPTIONAL, IN ULONG CreateOptions, OUT PULONG Disposition OPTIONAL)
Definition: ntapi.c:240
#define STATUS_SUCCESS
Definition: shellext.h:65
Definition: cookie.c:202

Referenced by get_registry_locale_info(), GetUserGeoID(), LOCALE_InitRegistry(), SetLocaleInfoW(), and SetUserGeoID().

◆ DEBUG_CHANNEL()

DEBUG_CHANNEL ( nls  )

◆ enum_lang_proc_a()

static BOOL CALLBACK enum_lang_proc_a ( HMODULE  hModule,
LPCSTR  type,
LPCSTR  name,
WORD  LangID,
LONG_PTR  lParam 
)
static

Definition at line 2951 of file locale.c.

2953{
2954 LOCALE_ENUMPROCA lpfnLocaleEnum = (LOCALE_ENUMPROCA)lParam;
2955 char buf[20];
2956
2957 sprintf(buf, "%08x", (UINT)LangID);
2958 return lpfnLocaleEnum( buf );
2959}
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
#define sprintf(buf, format,...)
Definition: sprintf.c:55
_Must_inspect_result_ _In_ WDFUSBDEVICE _In_opt_ WDFREQUEST _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_writes_opt_ NumCharacters PUSHORT _Inout_ PUSHORT _In_ UCHAR _In_opt_ USHORT LangID
Definition: wdfusb.h:1083
BOOL(CALLBACK * LOCALE_ENUMPROCA)(LPSTR)
Definition: winnls.h:539

Referenced by EnumSystemLocalesA().

◆ enum_lang_proc_w()

static BOOL CALLBACK enum_lang_proc_w ( HMODULE  hModule,
LPCWSTR  type,
LPCWSTR  name,
WORD  LangID,
LONG_PTR  lParam 
)
static

Definition at line 2961 of file locale.c.

2963{
2964 static const WCHAR formatW[] = {'%','0','8','x',0};
2965 LOCALE_ENUMPROCW lpfnLocaleEnum = (LOCALE_ENUMPROCW)lParam;
2966 WCHAR buf[20];
2967 sprintfW( buf, formatW, (UINT)LangID );
2968 return lpfnLocaleEnum( buf );
2969}
#define sprintfW
Definition: unicode.h:64
BOOL(CALLBACK * LOCALE_ENUMPROCW)(LPWSTR)
Definition: winnls.h:540

Referenced by EnumSystemLocalesW().

◆ enum_locale_ex_proc()

static BOOL CALLBACK enum_locale_ex_proc ( HMODULE  module,
LPCWSTR  type,
LPCWSTR  name,
WORD  lang,
LONG_PTR  lparam 
)
static

Definition at line 3016 of file locale.c.

3018{
3020 WCHAR buffer[256];
3021 DWORD neutral;
3022 unsigned int flags;
3023
3025 buffer, sizeof(buffer) / sizeof(WCHAR) );
3027 LOCALE_INEUTRAL | LOCALE_NOUSEROVERRIDE | LOCALE_RETURN_NUMBER,
3028 (LPWSTR)&neutral, sizeof(neutral) / sizeof(WCHAR) ))
3029 neutral = 0;
3032 if (data->flags && !(data->flags & flags)) return TRUE;
3033 return data->proc( buffer, flags, data->lparam );
3034}
@ lparam
Definition: SystemMenu.c:31
#define TRUE
Definition: types.h:120
INT WINAPI GetLocaleInfoW(LCID lcid, LCTYPE lctype, LPWSTR buffer, INT len)
Definition: locale.c:1666
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
#define SORT_DEFAULT
static const WCHAR lang[]
Definition: wbemdisp.c:287
#define LOCALE_NEUTRALDATA
Definition: winnls.h:212
#define LOCALE_SNAME
Definition: winnls.h:132
#define LOCALE_SPECIFICDATA
Definition: winnls.h:213
#define LOCALE_INEUTRAL
Definition: winnls.h:158
#define LOCALE_WINDOWS
Definition: winnls.h:208

Referenced by EnumSystemLocalesEx().

◆ enum_uilang_proc_a()

static BOOL CALLBACK enum_uilang_proc_a ( HMODULE  hModule,
LPCSTR  type,
LPCSTR  name,
WORD  LangID,
LONG_PTR  lParam 
)
static

Definition at line 4921 of file locale.c.

4923{
4925 char buf[20];
4926
4927 sprintf(buf, "%08x", (UINT)LangID);
4928 return enum_uilang->u.procA( buf, enum_uilang->param );
4929}
union ENUM_UILANG_CALLBACK::@490 u
UILANGUAGE_ENUMPROCA procA
Definition: locale.c:4914

Referenced by EnumUILanguagesA().

◆ enum_uilang_proc_w()

static BOOL CALLBACK enum_uilang_proc_w ( HMODULE  hModule,
LPCWSTR  type,
LPCWSTR  name,
WORD  LangID,
LONG_PTR  lParam 
)
static

Definition at line 4931 of file locale.c.

4933{
4934 static const WCHAR formatW[] = {'%','0','8','x',0};
4936 WCHAR buf[20];
4937
4938 sprintfW( buf, formatW, (UINT)LangID );
4939 return enum_uilang->u.procW( buf, enum_uilang->param );
4940}
UILANGUAGE_ENUMPROCW procW
Definition: locale.c:4915

Referenced by EnumUILanguagesW().

◆ EnumLanguageGroupLocalesA()

BOOL WINAPI EnumLanguageGroupLocalesA ( LANGGROUPLOCALE_ENUMPROCA  pLangGrpLcEnumProc,
LGRPID  lgrpid,
DWORD  dwFlags,
LONG_PTR  lParam 
)

Definition at line 4775 of file locale.c.

4777{
4779
4780 TRACE("(%p,0x%08X,0x%08X,0x%08lX)\n", pLangGrpLcEnumProc, lgrpid, dwFlags, lParam);
4781
4782 callbacks.procA = pLangGrpLcEnumProc;
4783 callbacks.procW = NULL;
4784 callbacks.dwFlags = dwFlags;
4785 callbacks.lgrpid = lgrpid;
4786 callbacks.lParam = lParam;
4787
4788 return NLS_EnumLanguageGroupLocales( pLangGrpLcEnumProc ? &callbacks : NULL );
4789}
static BOOL NLS_EnumLanguageGroupLocales(ENUMLANGUAGEGROUPLOCALE_CALLBACKS *lpProcs)
Definition: locale.c:4673
#define TRACE(s)
Definition: solgame.cpp:4
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1176
static int callbacks
Definition: xmllint.c:838

Referenced by InitFunctionPointers(), and test_digit_substitution().

◆ EnumLanguageGroupLocalesW()

BOOL WINAPI EnumLanguageGroupLocalesW ( LANGGROUPLOCALE_ENUMPROCW  pLangGrpLcEnumProc,
LGRPID  lgrpid,
DWORD  dwFlags,
LONG_PTR  lParam 
)

Definition at line 4796 of file locale.c.

4798{
4800
4801 TRACE("(%p,0x%08X,0x%08X,0x%08lX)\n", pLangGrpLcEnumProc, lgrpid, dwFlags, lParam);
4802
4803 callbacks.procA = NULL;
4804 callbacks.procW = pLangGrpLcEnumProc;
4805 callbacks.dwFlags = dwFlags;
4806 callbacks.lgrpid = lgrpid;
4807 callbacks.lParam = lParam;
4808
4809 return NLS_EnumLanguageGroupLocales( pLangGrpLcEnumProc ? &callbacks : NULL );
4810}

◆ EnumSystemCodePagesA()

BOOL WINAPI EnumSystemCodePagesA ( CODEPAGE_ENUMPROCA  lpfnCodePageEnum,
DWORD  flags 
)

Definition at line 2274 of file locale.c.

2275{
2276 const union cptable *table;
2277 char buffer[10];
2278 int index = 0;
2279
2280 for (;;)
2281 {
2282 if (!(table = wine_cp_enum_table( index++ ))) break;
2283 sprintf( buffer, "%d", table->info.codepage );
2284 if (!lpfnCodePageEnum( buffer )) break;
2285 }
2286 return TRUE;
2287}
GLuint index
Definition: glext.h:6031
const union cptable * wine_cp_enum_table(unsigned int index)
Definition: cptable.c:203

◆ EnumSystemCodePagesW()

BOOL WINAPI EnumSystemCodePagesW ( CODEPAGE_ENUMPROCW  lpfnCodePageEnum,
DWORD  flags 
)

Definition at line 2295 of file locale.c.

2296{
2297 const union cptable *table;
2298 WCHAR buffer[10], *p;
2299 int page, index = 0;
2300
2301 for (;;)
2302 {
2303 if (!(table = wine_cp_enum_table( index++ ))) break;
2304 p = buffer + sizeof(buffer)/sizeof(WCHAR);
2305 *--p = 0;
2306 page = table->info.codepage;
2307 do
2308 {
2309 *--p = '0' + (page % 10);
2310 page /= 10;
2311 } while( page );
2312 if (!lpfnCodePageEnum( p )) break;
2313 }
2314 return TRUE;
2315}
GLfloat GLfloat p
Definition: glext.h:8902
Definition: module.h:576

Referenced by InitCodePagesList().

◆ EnumSystemGeoID()

BOOL WINAPI EnumSystemGeoID ( GEOCLASS  geoclass,
GEOID  parent,
GEO_ENUMPROC  enumproc 
)

Definition at line 5610 of file locale.c.

5611{
5612 INT i;
5613
5614 TRACE("(%d, %d, %p)\n", geoclass, parent, enumproc);
5615
5616 if (!enumproc) {
5618 return FALSE;
5619 }
5620
5621 if (geoclass != GEOCLASS_NATION && geoclass != GEOCLASS_REGION) {
5623 return FALSE;
5624 }
5625
5626 for (i = 0; i < sizeof(geoinfodata)/sizeof(struct geoinfo_t); i++) {
5627 const struct geoinfo_t *ptr = &geoinfodata[i];
5628
5629 if (geoclass == GEOCLASS_NATION && (ptr->kind == LOCATION_REGION))
5630 continue;
5631
5632 if (geoclass == GEOCLASS_REGION && (ptr->kind == LOCATION_NATION))
5633 continue;
5634
5635 if (parent && ptr->parent != parent)
5636 continue;
5637
5638 if (!enumproc(ptr->id))
5639 return TRUE;
5640 }
5641
5642 return TRUE;
5643}
#define FALSE
Definition: types.h:117
static const struct geoinfo_t geoinfodata[]
Definition: locale.c:5014
r parent
Definition: btrfs.c:3010
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
static PVOID ptr
Definition: dispmode.c:27
@ GEOCLASS_REGION
Definition: winnls.h:558
@ GEOCLASS_NATION
Definition: winnls.h:557

Referenced by CreateLocationsList(), and InitFunctionPointers().

◆ EnumSystemLanguageGroupsA()

BOOL WINAPI EnumSystemLanguageGroupsA ( LANGUAGEGROUP_ENUMPROCA  pLangGrpEnumProc,
DWORD  dwFlags,
LONG_PTR  lParam 
)

Definition at line 4576 of file locale.c.

4578{
4580
4581 TRACE("(%p,0x%08X,0x%08lX)\n", pLangGrpEnumProc, dwFlags, lParam);
4582
4583 procs.procA = pLangGrpEnumProc;
4584 procs.procW = NULL;
4585 procs.dwFlags = dwFlags;
4586 procs.lParam = lParam;
4587
4588 return NLS_EnumSystemLanguageGroups( pLangGrpEnumProc ? &procs : NULL);
4589}
static BOOL NLS_EnumSystemLanguageGroups(ENUMLANGUAGEGROUP_CALLBACKS *lpProcs)
Definition: locale.c:4477
LANGUAGEGROUP_ENUMPROCW procW
Definition: locale.c:4471
LANGUAGEGROUP_ENUMPROCA procA
Definition: locale.c:4470

Referenced by InitFunctionPointers().

◆ EnumSystemLanguageGroupsW()

BOOL WINAPI EnumSystemLanguageGroupsW ( LANGUAGEGROUP_ENUMPROCW  pLangGrpEnumProc,
DWORD  dwFlags,
LONG_PTR  lParam 
)

Definition at line 4596 of file locale.c.

4598{
4600
4601 TRACE("(%p,0x%08X,0x%08lX)\n", pLangGrpEnumProc, dwFlags, lParam);
4602
4603 procs.procA = NULL;
4604 procs.procW = pLangGrpEnumProc;
4605 procs.dwFlags = dwFlags;
4606 procs.lParam = lParam;
4607
4608 return NLS_EnumSystemLanguageGroups( pLangGrpEnumProc ? &procs : NULL);
4609}

◆ EnumSystemLocalesA()

BOOL WINAPI EnumSystemLocalesA ( LOCALE_ENUMPROCA  lpfnLocaleEnum,
DWORD  dwFlags 
)

Definition at line 2984 of file locale.c.

2985{
2986 TRACE("(%p,%08x)\n", lpfnLocaleEnum, dwFlags);
2989 (LONG_PTR)lpfnLocaleEnum);
2990 return TRUE;
2991}
BOOL WINAPI EnumResourceLanguagesA(HMODULE hmod, LPCSTR type, LPCSTR name, ENUMRESLANGPROCA lpfun, LONG_PTR lparam)
Definition: res.c:428
static BOOL CALLBACK enum_lang_proc_a(HMODULE hModule, LPCSTR type, LPCSTR name, WORD LangID, LONG_PTR lParam)
Definition: locale.c:2951
HMODULE kernel32_handle
Definition: dllmain.c:26
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
#define RT_STRING
Definition: pedump.c:368
#define LOCALE_ILANGUAGE
Definition: winnls.h:25
const char * LPCSTR
Definition: xmlstorage.h:183
char * LPSTR
Definition: xmlstorage.h:182

Referenced by __GetLCID().

◆ EnumSystemLocalesEx()

BOOL WINAPI EnumSystemLocalesEx ( LOCALE_ENUMPROCEX  proc,
DWORD  flags,
LPARAM  lparam,
LPVOID  reserved 
)

Definition at line 3039 of file locale.c.

3040{
3042
3043 if (reserved)
3044 {
3046 return FALSE;
3047 }
3048 data.proc = proc;
3049 data.flags = flags;
3050 data.lparam = lparam;
3054 return TRUE;
3055}
BOOL WINAPI EnumResourceLanguagesW(HMODULE hmod, LPCWSTR type, LPCWSTR name, ENUMRESLANGPROCW lpfun, LONG_PTR lparam)
Definition: res.c:480
static BOOL CALLBACK enum_locale_ex_proc(HMODULE module, LPCWSTR type, LPCWSTR name, WORD lang, LONG_PTR lparam)
Definition: locale.c:3016
#define MAKEINTRESOURCE(i)
Definition: ntverrsrc.c:25
static HANDLE proc()
Definition: pdb.c:34
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185

Referenced by InitFunctionPointers().

◆ EnumSystemLocalesW()

BOOL WINAPI EnumSystemLocalesW ( LOCALE_ENUMPROCW  lpfnLocaleEnum,
DWORD  dwFlags 
)

Definition at line 2999 of file locale.c.

3000{
3001 TRACE("(%p,%08x)\n", lpfnLocaleEnum, dwFlags);
3004 (LONG_PTR)lpfnLocaleEnum);
3005 return TRUE;
3006}
static BOOL CALLBACK enum_lang_proc_w(HMODULE hModule, LPCWSTR type, LPCWSTR name, WORD LangID, LONG_PTR lParam)
Definition: locale.c:2961

Referenced by CreateLanguagesList(), CreateSortList(), enum_system_locales_ex_nolock(), EnumRfc1766_create(), GetLcidFromCountry(), GetLcidFromLangCountry(), GetLcidFromLanguage(), InitLanguagesList(), and IsSortPageNeeded().

◆ EnumUILanguagesA()

BOOL WINAPI EnumUILanguagesA ( UILANGUAGE_ENUMPROCA  pUILangEnumProc,
DWORD  dwFlags,
LONG_PTR  lParam 
)

Definition at line 4945 of file locale.c.

4946{
4947 ENUM_UILANG_CALLBACK enum_uilang;
4948
4949 TRACE("%p, %x, %lx\n", pUILangEnumProc, dwFlags, lParam);
4950
4951 if(!pUILangEnumProc) {
4953 return FALSE;
4954 }
4955 if(dwFlags) {
4957 return FALSE;
4958 }
4959
4960 enum_uilang.u.procA = pUILangEnumProc;
4961 enum_uilang.flags = dwFlags;
4962 enum_uilang.param = lParam;
4963
4966 (LONG_PTR)&enum_uilang);
4967 return TRUE;
4968}
static BOOL CALLBACK enum_uilang_proc_a(HMODULE hModule, LPCSTR type, LPCSTR name, WORD LangID, LONG_PTR lParam)
Definition: locale.c:4921

Referenced by InitFunctionPointers().

◆ EnumUILanguagesW()

BOOL WINAPI EnumUILanguagesW ( UILANGUAGE_ENUMPROCW  pUILangEnumProc,
DWORD  dwFlags,
LONG_PTR  lParam 
)

Definition at line 4973 of file locale.c.

4974{
4975 ENUM_UILANG_CALLBACK enum_uilang;
4976
4977 TRACE("%p, %x, %lx\n", pUILangEnumProc, dwFlags, lParam);
4978
4979
4980 if(!pUILangEnumProc) {
4982 return FALSE;
4983 }
4984 if(dwFlags) {
4986 return FALSE;
4987 }
4988
4989 enum_uilang.u.procW = pUILangEnumProc;
4990 enum_uilang.flags = dwFlags;
4991 enum_uilang.param = lParam;
4992
4995 (LONG_PTR)&enum_uilang);
4996 return TRUE;
4997}
static BOOL CALLBACK enum_uilang_proc_w(HMODULE hModule, LPCWSTR type, LPCWSTR name, WORD LangID, LONG_PTR lParam)
Definition: locale.c:4931

◆ FoldStringA()

INT WINAPI FoldStringA ( DWORD  dwFlags,
LPCSTR  src,
INT  srclen,
LPSTR  dst,
INT  dstlen 
)

Definition at line 3921 of file locale.c.

3923{
3924 INT ret = 0, srclenW = 0;
3925 WCHAR *srcW = NULL, *dstW = NULL;
3926
3927 if (!src || !srclen || dstlen < 0 || (dstlen && !dst) || src == dst)
3928 {
3930 return 0;
3931 }
3932
3934 src, srclen, NULL, 0);
3935 srcW = HeapAlloc(GetProcessHeap(), 0, srclenW * sizeof(WCHAR));
3936
3937 if (!srcW)
3938 {
3940 goto FoldStringA_exit;
3941 }
3942
3944 src, srclen, srcW, srclenW);
3945
3946 dwFlags = (dwFlags & ~MAP_PRECOMPOSED) | MAP_FOLDCZONE;
3947
3948 ret = FoldStringW(dwFlags, srcW, srclenW, NULL, 0);
3949 if (ret && dstlen)
3950 {
3951 dstW = HeapAlloc(GetProcessHeap(), 0, ret * sizeof(WCHAR));
3952
3953 if (!dstW)
3954 {
3956 goto FoldStringA_exit;
3957 }
3958
3959 ret = FoldStringW(dwFlags, srcW, srclenW, dstW, ret);
3960 if (!WideCharToMultiByte(CP_ACP, 0, dstW, ret, dst, dstlen, NULL, NULL))
3961 {
3962 ret = 0;
3964 }
3965 }
3966
3967 HeapFree(GetProcessHeap(), 0, dstW);
3968
3969FoldStringA_exit:
3970 HeapFree(GetProcessHeap(), 0, srcW);
3971 return ret;
3972}
#define ERROR_INSUFFICIENT_BUFFER
Definition: dderror.h:10
#define WideCharToMultiByte
Definition: compat.h:111
INT WINAPI FoldStringW(DWORD dwFlags, LPCWSTR src, INT srclen, LPWSTR dst, INT dstlen)
Definition: locale.c:3979
GLenum src
Definition: glext.h:6340
GLenum GLenum dst
Definition: glext.h:6340
#define MB_COMPOSITE
Definition: unicode.h:40
static DWORD LPDWORD LPCSTR DWORD srclen
Definition: directory.c:52
static DWORD dstlen
Definition: directory.c:51
#define MAP_COMPOSITE
Definition: winnls.h:218
#define MAP_FOLDCZONE
Definition: winnls.h:215

Referenced by InitFunctionPointers().

◆ FoldStringW()

INT WINAPI FoldStringW ( DWORD  dwFlags,
LPCWSTR  src,
INT  srclen,
LPWSTR  dst,
INT  dstlen 
)

Definition at line 3979 of file locale.c.

3981{
3982 int ret;
3983
3984 switch (dwFlags & (MAP_COMPOSITE|MAP_PRECOMPOSED|MAP_EXPAND_LIGATURES))
3985 {
3986 case 0:
3987 if (dwFlags)
3988 break;
3989 /* Fall through for dwFlags == 0 */
3991 case MAP_PRECOMPOSED|MAP_EXPAND_LIGATURES:
3992 case MAP_COMPOSITE|MAP_EXPAND_LIGATURES:
3994 return 0;
3995 }
3996
3997 if (!src || !srclen || dstlen < 0 || (dstlen && !dst) || src == dst)
3998 {
4000 return 0;
4001 }
4002
4004 if (!ret)
4006 return ret;
4007}
int wine_fold_string(int flags, const WCHAR *src, int srclen, WCHAR *dst, int dstlen)
Definition: fold.c:118
#define MAP_PRECOMPOSED
Definition: winnls.h:217

Referenced by FoldStringA(), IdnToNameprepUnicode(), and InitFunctionPointers().

◆ get_codepage_table()

static const union cptable * get_codepage_table ( unsigned int  codepage)
static

Definition at line 302 of file locale.c.

303{
304 const union cptable *ret = NULL;
305
306 assert( ansi_cptable ); /* init must have been done already */
307
308 switch(codepage)
309 {
310 case CP_ACP:
311 return ansi_cptable;
312 case CP_OEMCP:
313 return oem_cptable;
314 case CP_MACCP:
315 return mac_cptable;
316 case CP_UTF7:
317 case CP_UTF8:
318 break;
319 case CP_THREAD_ACP:
320 if (NtCurrentTeb()->CurrentLocale == GetUserDefaultLCID()) return ansi_cptable;
321 codepage = get_lcid_codepage( NtCurrentTeb()->CurrentLocale );
322 if (!codepage) return ansi_cptable;
323 /* fall through */
324 default:
325 if (codepage == ansi_cptable->info.codepage) return ansi_cptable;
326 if (codepage == oem_cptable->info.codepage) return oem_cptable;
327 if (codepage == mac_cptable->info.codepage) return mac_cptable;
329 break;
330 }
331 return ret;
332}
static const union cptable * oem_cptable
Definition: locale.c:66
static const union cptable * ansi_cptable
Definition: locale.c:65
static const union cptable * mac_cptable
Definition: locale.c:67
#define assert(x)
Definition: debug.h:53
const union cptable * wine_cp_get_table(unsigned int codepage)
Definition: cptable.c:192
#define CP_UTF8
Definition: nls.h:20
struct cp_info info
Definition: unicode.h:96
int codepage
Definition: win_iconv.c:156
#define CP_THREAD_ACP
Definition: winnls.h:235
#define CP_OEMCP
Definition: winnls.h:233
#define CP_UTF7
Definition: winnls.h:237
#define CP_MACCP
Definition: winnls.h:234

Referenced by GetCPInfo(), GetCPInfoExW(), IsDBCSLeadByteEx(), MultiByteToWideChar(), and WideCharToMultiByte().

◆ get_default_sublang()

static LANGID get_default_sublang ( LANGID  lang)
static

Definition at line 367 of file locale.c.

368{
369 switch (lang)
370 {
380 }
382 return lang;
383}
return
Definition: dirsup.c:529
#define MAKELANGID(p, s)
Definition: nls.h:15
#define SUBLANG_CHINESE_SINGAPORE
Definition: nls.h:211
#define LANG_SPANISH
Definition: nls.h:123
#define SUBLANG_CHINESE_MACAU
Definition: nls.h:212
#define SUBLANG_CHINESE_TRADITIONAL
Definition: nls.h:208
#define SUBLANG_CHINESE_SIMPLIFIED
Definition: nls.h:209
#define SUBLANG_DEFAULT
Definition: nls.h:168
#define SUBLANG_CHINESE_HONGKONG
Definition: nls.h:210
#define LANG_CHINESE
Definition: nls.h:42
#define PRIMARYLANGID(l)
Definition: nls.h:16
#define SUBLANG_SPANISH_MODERN
Definition: nls.h:338

Referenced by ConvertDefaultLocale(), GetLocaleInfoW(), and NLS_GetLanguageGroupName().

◆ get_dummy_preferred_ui_language()

static BOOL get_dummy_preferred_ui_language ( DWORD  flags,
ULONG count,
WCHAR buffer,
ULONG size 
)
static

Definition at line 1247 of file locale.c.

1248{
1249 LCTYPE type;
1250 int lsize;
1251
1252 FIXME("(0x%x %p %p %p) returning a dummy value (current locale)\n", flags, count, buffer, size);
1253
1254 if (flags & MUI_LANGUAGE_ID)
1256 else
1258
1260 if (!lsize)
1261 {
1262 /* keep last error from callee */
1263 return FALSE;
1264 }
1265 lsize++;
1266 if (!*size)
1267 {
1268 *size = lsize;
1269 *count = 1;
1270 return TRUE;
1271 }
1272
1273 if (lsize > *size)
1274 {
1276 return FALSE;
1277 }
1278
1280 {
1281 /* keep last error from callee */
1282 return FALSE;
1283 }
1284
1285 buffer[lsize-1] = 0;
1286 *size = lsize;
1287 *count = 1;
1288 TRACE("returned variable content: %d, \"%s\", %d\n", *count, debugstr_w(buffer), *size);
1289 return TRUE;
1290
1291}
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLsizeiptr size
Definition: glext.h:5919
#define debugstr_w
Definition: kernel32.h:32
DWORD LCTYPE
Definition: winnls.h:519

Referenced by GetSystemPreferredUILanguages(), and GetThreadPreferredUILanguages().

◆ get_geoinfo_dataptr()

static const struct geoinfo_t * get_geoinfo_dataptr ( GEOID  geoid)
static

Definition at line 5464 of file locale.c.

5465{
5466 int min, max;
5467
5468 min = 0;
5469 max = sizeof(geoinfodata)/sizeof(struct geoinfo_t)-1;
5470
5471 while (min <= max) {
5472 const struct geoinfo_t *ptr;
5473 int n = (min+max)/2;
5474
5475 ptr = &geoinfodata[n];
5476 if (geoid == ptr->id)
5477 /* we don't need empty entries */
5478 return *ptr->iso2W ? ptr : NULL;
5479
5480 if (ptr->id > geoid)
5481 max = n-1;
5482 else
5483 min = n+1;
5484 }
5485
5486 return NULL;
5487}
GLdouble n
Definition: glext.h:7729
#define min(a, b)
Definition: monoChain.cc:55
#define max(a, b)
Definition: svc.c:63

Referenced by GetGeoInfoW().

◆ get_lcid_codepage()

static UINT get_lcid_codepage ( LCID  lcid)
inlinestatic

Definition at line 288 of file locale.c.

289{
290 UINT ret;
291 if (!GetLocaleInfoW( lcid, LOCALE_IDEFAULTANSICODEPAGE|LOCALE_RETURN_NUMBER, (WCHAR *)&ret,
292 sizeof(ret)/sizeof(WCHAR) )) ret = 0;
293 return ret;
294}

Referenced by CompareStringA(), get_codepage_table(), GetLocaleInfoA(), GetStringTypeA(), LCMapStringA(), LOCALE_Init(), and SetLocaleInfoA().

◆ get_locale()

static const char * get_locale ( int  category,
const char category_name 
)
static

Definition at line 1021 of file locale.c.

1022{
1023 const char* ret = setlocale(category, NULL);
1024
1025#ifdef __ANDROID__
1026 if (!strcmp(ret, "C"))
1027 {
1028 ret = getenv( category_name );
1029 if (!ret || !ret[0]) ret = getenv( "LC_ALL" );
1030 if (!ret || !ret[0]) ret = "C";
1031 }
1032#endif
1033
1034#ifdef __APPLE__
1035 /* If LC_ALL is set, respect it as a user override.
1036 If LC_* is set, respect it as a user override, except if it's LC_CTYPE
1037 and equal to UTF-8. That's because, when the Mac locale isn't supported
1038 by the C library, Terminal.app sets LC_CTYPE=UTF-8 and doesn't set LANG.
1039 parse_locale_name() doesn't handle that properly, so we override that
1040 with the Mac locale (which uses UTF-8 for the charset, anyway).
1041 Otherwise:
1042 For LC_MESSAGES, we override the C library because the user language
1043 setting is separate from the locale setting on which LANG was based.
1044 If the C library didn't get anything better from LANG than C or POSIX,
1045 override that. That probably means the Mac locale isn't supported by
1046 the C library. */
1047 if (!has_env( "LC_ALL" ) &&
1048 ((category == LC_CTYPE && !strcmp( ret, "UTF-8" )) ||
1049 (!has_env( category_name ) &&
1050 (category == LC_MESSAGES || !strcmp( ret, "C" ) || !strcmp( ret, "POSIX" )))))
1051 {
1052 const char* override = get_mac_locale();
1053
1054 if (category == LC_MESSAGES)
1055 {
1056 /* Retrieve the preferred language as chosen in System Preferences. */
1057 static char messages_locale[50];
1058
1059 if (!messages_locale[0])
1060 {
1061 CFArrayRef preferred_langs = CFLocaleCopyPreferredLanguages();
1062 if (preferred_langs && CFArrayGetCount( preferred_langs ))
1063 {
1064 CFStringRef preferred_lang = CFArrayGetValueAtIndex( preferred_langs, 0 );
1065 CFDictionaryRef components = CFLocaleCreateComponentsFromLocaleIdentifier( NULL, preferred_lang );
1066 if (components)
1067 {
1068 CFStringRef lang = CFDictionaryGetValue( components, kCFLocaleLanguageCode );
1069 CFStringRef country = CFDictionaryGetValue( components, kCFLocaleCountryCode );
1070 CFLocaleRef locale = NULL;
1071 CFStringRef locale_string;
1072
1073 if (!country)
1074 {
1075 locale = CFLocaleCopyCurrent();
1076 country = CFLocaleGetValue( locale, kCFLocaleCountryCode );
1077 }
1078
1079 if (country)
1080 locale_string = CFStringCreateWithFormat( NULL, NULL, CFSTR("%@_%@"), lang, country );
1081 else
1082 locale_string = CFStringCreateCopy( NULL, lang );
1083 CFStringGetCString( locale_string, messages_locale, sizeof(messages_locale), kCFStringEncodingUTF8 );
1084 strcat( messages_locale, ".UTF-8" );
1085
1086 CFRelease( locale_string );
1087 if (locale) CFRelease( locale );
1088 CFRelease( components );
1089 }
1090 }
1091 if (preferred_langs)
1092 CFRelease( preferred_langs );
1093 }
1094
1095 if (messages_locale[0])
1096 override = messages_locale;
1097 }
1098
1099 TRACE( "%s is %s; overriding with %s\n", category_name, debugstr_a(ret), debugstr_a(override) );
1100 ret = override;
1101 }
1102#endif
1103
1104 return ret;
1105}
int strcmp(const char *String1, const char *String2)
Definition: utclib.c:469
GLenum GLenum GLuint components
Definition: glext.h:9620
#define LC_CTYPE
Definition: locale.h:19
_Check_return_ char *__cdecl getenv(_In_z_ const char *_VarName)
strcat
Definition: string.h:92
#define setlocale(n, s)
Definition: locale.h:46

◆ get_locale_registry_value()

static struct registry_value * get_locale_registry_value ( DWORD  lctype)
static

Definition at line 1452 of file locale.c.

1453{
1454 int i;
1455 for (i=0; i < sizeof(registry_values)/sizeof(registry_values[0]); i++)
1456 if (registry_values[i].lctype == lctype)
1457 return &registry_values[i];
1458 return NULL;
1459}
static struct registry_value registry_values[]

Referenced by GetLocaleInfoW(), and SetLocaleInfoW().

◆ get_registry_locale_info()

static INT get_registry_locale_info ( struct registry_value registry_value,
LPWSTR  buffer,
INT  len 
)
static

Definition at line 1468 of file locale.c.

1469{
1470 DWORD size;
1471 INT ret;
1472 HANDLE hkey;
1476 static const int info_size = FIELD_OFFSET(KEY_VALUE_PARTIAL_INFORMATION, Data);
1477
1479
1481 {
1482 if (!(hkey = create_registry_key()))
1483 {
1485 return -1;
1486 }
1487
1489 size = info_size + len * sizeof(WCHAR);
1490
1491 if (!(info = HeapAlloc( GetProcessHeap(), 0, size )))
1492 {
1493 NtClose( hkey );
1496 return 0;
1497 }
1498
1500
1501 /* try again with a bigger buffer when we have to return the correct size */
1502 if (status == STATUS_BUFFER_OVERFLOW && !buffer && size > info_size)
1503 {
1505 if ((new_info = HeapReAlloc( GetProcessHeap(), 0, info, size )))
1506 {
1507 info = new_info;
1509 }
1510 }
1511
1512 NtClose( hkey );
1513
1514 if (!status)
1515 {
1516 INT length = (size - info_size) / sizeof(WCHAR);
1517 LPWSTR cached_value;
1518
1519 if (!length || ((WCHAR *)&info->Data)[length-1])
1520 length++;
1521
1522 cached_value = HeapAlloc( GetProcessHeap(), 0, length * sizeof(WCHAR) );
1523
1524 if (!cached_value)
1525 {
1526 HeapFree( GetProcessHeap(), 0, info );
1529 return 0;
1530 }
1531
1532 memcpy( cached_value, info->Data, (length-1) * sizeof(WCHAR) );
1533 cached_value[length-1] = 0;
1534 HeapFree( GetProcessHeap(), 0, info );
1535 registry_value->cached_value = cached_value;
1536 }
1537 else
1538 {
1540 {
1541 ret = (size - info_size) / sizeof(WCHAR);
1542 }
1544 {
1545 ret = -1;
1546 }
1547 else
1548 {
1550 ret = 0;
1551 }
1552 HeapFree( GetProcessHeap(), 0, info );
1554 return ret;
1555 }
1556 }
1557
1559
1560 if (buffer)
1561 {
1562 if (ret > len)
1563 {
1565 ret = 0;
1566 }
1567 else
1568 {
1570 }
1571 }
1572
1574
1575 return ret;
1576}
LONG NTSTATUS
Definition: precomp.h:26
#define HeapReAlloc
Definition: compat.h:734
#define lstrcpyW
Definition: compat.h:749
#define lstrlenW
Definition: compat.h:750
static RTL_CRITICAL_SECTION cache_section
Definition: locale.c:263
static HANDLE create_registry_key(void)
Definition: locale.c:766
GLuint GLsizei GLsizei * length
Definition: glext.h:6040
GLenum GLsizei len
Definition: glext.h:6722
NTSYSAPI ULONG WINAPI RtlNtStatusToDosError(NTSTATUS)
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
NTSYSAPI NTSTATUS NTAPI RtlEnterCriticalSection(_In_ PRTL_CRITICAL_SECTION CriticalSection)
NTSYSAPI NTSTATUS NTAPI RtlLeaveCriticalSection(_In_ PRTL_CRITICAL_SECTION CriticalSection)
@ KeyValuePartialInformation
Definition: nt_native.h:1182
NTSYSAPI NTSTATUS NTAPI NtQueryValueKey(IN HANDLE KeyHandle, IN PUNICODE_STRING ValueName, IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, IN PVOID KeyValueInformation, IN ULONG Length, IN PULONG ResultLength)
#define STATUS_BUFFER_OVERFLOW
Definition: shellext.h:66
WCHAR * cached_value
Definition: locale.c:215
const WCHAR * name
Definition: locale.c:214
Definition: ps.c:97
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:255
#define STATUS_OBJECT_NAME_NOT_FOUND
Definition: udferr_usr.h:149

Referenced by GetLocaleInfoW().

◆ get_table_entry()

static unsigned short get_table_entry ( const unsigned short table,
WCHAR  ch 
)
inlinestatic

Definition at line 277 of file locale.c.

278{
279 return table[table[table[ch >> 8] + ((ch >> 4) & 0x0f)] + (ch & 0xf)];
280}

Referenced by IdnToNameprepUnicode(), and IdnToUnicode().

◆ get_value_base_by_lctype()

static int get_value_base_by_lctype ( LCTYPE  lctype)
static

Definition at line 1656 of file locale.c.

1657{
1658 return lctype == LOCALE_ILANGUAGE || lctype == LOCALE_IDEFAULTLANGUAGE ? 16 : 10;
1659}
#define LOCALE_IDEFAULTLANGUAGE
Definition: winnls.h:37

Referenced by GetLocaleInfoW().

◆ GetACP()

◆ GetCPInfo()

BOOL WINAPI GetCPInfo ( UINT  codepage,
LPCPINFO  cpinfo 
)

Definition at line 2144 of file locale.c.

2145{
2146 const union cptable *table;
2147
2148 if (!cpinfo)
2149 {
2151 return FALSE;
2152 }
2153
2154 if (!(table = get_codepage_table( codepage )))
2155 {
2156 switch(codepage)
2157 {
2158 case CP_UTF7:
2159 case CP_UTF8:
2160 cpinfo->DefaultChar[0] = 0x3f;
2161 cpinfo->DefaultChar[1] = 0;
2162 cpinfo->LeadByte[0] = cpinfo->LeadByte[1] = 0;
2163 cpinfo->MaxCharSize = (codepage == CP_UTF7) ? 5 : 4;
2164 return TRUE;
2165 }
2166
2168 return FALSE;
2169 }
2170 if (table->info.def_char & 0xff00)
2171 {
2172 cpinfo->DefaultChar[0] = (table->info.def_char & 0xff00) >> 8;
2173 cpinfo->DefaultChar[1] = table->info.def_char & 0x00ff;
2174 }
2175 else
2176 {
2177 cpinfo->DefaultChar[0] = table->info.def_char & 0xff;
2178 cpinfo->DefaultChar[1] = 0;
2179 }
2180 if ((cpinfo->MaxCharSize = table->info.char_size) == 2)
2181 memcpy( cpinfo->LeadByte, table->dbcs.lead_bytes, sizeof(cpinfo->LeadByte) );
2182 else
2183 cpinfo->LeadByte[0] = cpinfo->LeadByte[1] = 0;
2184
2185 return TRUE;
2186}
static const union cptable * get_codepage_table(unsigned int codepage)
Definition: locale.c:302
BYTE LeadByte[MAX_LEADBYTES]
Definition: winnls.h:585
BYTE DefaultChar[MAX_DEFAULTCHAR]
Definition: winnls.h:584
UINT MaxCharSize
Definition: winnls.h:583

Referenced by __acrt_locale_initialize_ctype(), _Locale_codecvt_create(), _Locale_ctype_create(), _setmbcp_l(), _setmbcp_nolock(), GetCPInfoExW(), GetKerningPairsA(), GetWindowTextLengthA(), Global_Chr(), InternalCompareStringA(), make_csconv(), ME_GetTextLengthEx(), MSVCRT__create_locale(), setSBUpLow(), test_GetCPInfo(), and test_mbcp().

◆ GetCPInfoExA()

BOOL WINAPI GetCPInfoExA ( UINT  codepage,
DWORD  dwFlags,
LPCPINFOEXA  cpinfo 
)

Definition at line 2202 of file locale.c.

2203{
2204 CPINFOEXW cpinfoW;
2205
2206 if (!GetCPInfoExW( codepage, dwFlags, &cpinfoW ))
2207 return FALSE;
2208
2209 /* the layout is the same except for CodePageName */
2210 memcpy(cpinfo, &cpinfoW, sizeof(CPINFOEXA));
2211 WideCharToMultiByte(CP_ACP, 0, cpinfoW.CodePageName, -1, cpinfo->CodePageName, sizeof(cpinfo->CodePageName), NULL, NULL);
2212 return TRUE;
2213}
BOOL WINAPI GetCPInfoExW(UINT codepage, DWORD dwFlags, LPCPINFOEXW cpinfo)
Definition: locale.c:2220
CHAR CodePageName[MAX_PATH]
Definition: winnls.h:593
WCHAR CodePageName[MAX_PATH]
Definition: winnls.h:601

Referenced by init_procs(), and test_threadcp().

◆ GetCPInfoExW()

BOOL WINAPI GetCPInfoExW ( UINT  codepage,
DWORD  dwFlags,
LPCPINFOEXW  cpinfo 
)

Definition at line 2220 of file locale.c.

2221{
2222 if (!GetCPInfo( codepage, (LPCPINFO)cpinfo ))
2223 return FALSE;
2224
2225 switch(codepage)
2226 {
2227 case CP_UTF7:
2228 {
2229 static const WCHAR utf7[] = {'U','n','i','c','o','d','e',' ','(','U','T','F','-','7',')',0};
2230
2231 cpinfo->CodePage = CP_UTF7;
2232 cpinfo->UnicodeDefaultChar = 0x3f;
2233 strcpyW(cpinfo->CodePageName, utf7);
2234 break;
2235 }
2236
2237 case CP_UTF8:
2238 {
2239 static const WCHAR utf8[] = {'U','n','i','c','o','d','e',' ','(','U','T','F','-','8',')',0};
2240
2241 cpinfo->CodePage = CP_UTF8;
2242 cpinfo->UnicodeDefaultChar = 0x3f;
2243 strcpyW(cpinfo->CodePageName, utf8);
2244 break;
2245 }
2246
2247 default:
2248 {
2249 const union cptable *table = get_codepage_table( codepage );
2250
2251 cpinfo->CodePage = table->info.codepage;
2252 cpinfo->UnicodeDefaultChar = table->info.def_unicode_char;
2253 MultiByteToWideChar( CP_ACP, 0, table->info.name, -1, cpinfo->CodePageName,
2254 sizeof(cpinfo->CodePageName)/sizeof(WCHAR));
2255 break;
2256 }
2257 }
2258 return TRUE;
2259}
BOOL WINAPI GetCPInfo(UINT codepage, LPCPINFO cpinfo)
Definition: locale.c:2144
#define strcpyW(d, s)
Definition: unicode.h:35
const WCHAR * name

Referenced by AddCodePage(), FillCharacterSetComboList(), GetCPInfoExA(), GetSupportedCP(), and ME_StreamOutRTFHeader().

◆ GetFileMUIInfo()

BOOL WINAPI GetFileMUIInfo ( DWORD  flags,
PCWSTR  path,
FILEMUIINFO info,
DWORD size 
)

Definition at line 6228 of file locale.c.

6229{
6230 FIXME("stub: %u, %s, %p, %p\n", flags, debugstr_w(path), info, size);
6231
6233 return FALSE;
6234}
#define ERROR_CALL_NOT_IMPLEMENTED
Definition: compat.h:102

◆ GetFileMUIPath()

BOOL WINAPI GetFileMUIPath ( DWORD  flags,
PCWSTR  filepath,
PWSTR  language,
PULONG  languagelen,
PWSTR  muipath,
PULONG  muipathlen,
PULONGLONG  enumerator 
)

Definition at line 6213 of file locale.c.

6215{
6216 FIXME("stub: 0x%x, %s, %s, %p, %p, %p, %p\n", flags, debugstr_w(filepath),
6217 debugstr_w(language), languagelen, muipath, muipathlen, enumerator);
6218
6220
6221 return FALSE;
6222}

◆ GetGeoInfoA()

INT WINAPI GetGeoInfoA ( GEOID  geoid,
GEOTYPE  geotype,
LPSTR  data,
int  data_len,
LANGID  lang 
)

Definition at line 5566 of file locale.c.

5567{
5568 WCHAR *buffW;
5569 INT len;
5570
5571 TRACE("%d %d %p %d %d\n", geoid, geotype, data, data_len, lang);
5572
5573 len = GetGeoInfoW(geoid, geotype, NULL, 0, lang);
5574 if (!len)
5575 return 0;
5576
5577 buffW = HeapAlloc(GetProcessHeap(), 0, len*sizeof(WCHAR));
5578 if (!buffW)
5579 return 0;
5580
5581 GetGeoInfoW(geoid, geotype, buffW, len, lang);
5582 len = WideCharToMultiByte(CP_ACP, 0, buffW, -1, NULL, 0, NULL, NULL);
5583 if (!data || !data_len) {
5584 HeapFree(GetProcessHeap(), 0, buffW);
5585 return len;
5586 }
5587
5588 len = WideCharToMultiByte(CP_ACP, 0, buffW, -1, data, data_len, NULL, NULL);
5589 HeapFree(GetProcessHeap(), 0, buffW);
5590
5591 if (data_len < len)
5593 return data_len < len ? 0 : len;
5594}
INT WINAPI GetGeoInfoW(GEOID geoid, GEOTYPE geotype, LPWSTR data, int data_len, LANGID lang)
Definition: locale.c:5492

Referenced by InitFunctionPointers().

◆ GetGeoInfoW()

INT WINAPI GetGeoInfoW ( GEOID  geoid,
GEOTYPE  geotype,
LPWSTR  data,
int  data_len,
LANGID  lang 
)

Definition at line 5492 of file locale.c.

5493{
5494 const struct geoinfo_t *ptr;
5495 const WCHAR *str = NULL;
5496 WCHAR buffW[12];
5497 LONG val = 0;
5498 INT len;
5499
5500 TRACE("%d %d %p %d %d\n", geoid, geotype, data, data_len, lang);
5501
5502 if (!(ptr = get_geoinfo_dataptr(geoid))) {
5504 return 0;
5505 }
5506
5507 switch (geotype) {
5508 case GEO_FRIENDLYNAME:
5509 {
5510#ifdef __REACTOS__
5511 return NLS_GetGeoFriendlyName(geoid, data, data_len, lang);
5512#else
5513 return NLS_GetGeoFriendlyName(geoid, data, data_len);
5514#endif
5515 }
5516 case GEO_NATION:
5517 val = geoid;
5518 break;
5519 case GEO_ISO_UN_NUMBER:
5520 val = ptr->uncode;
5521 break;
5522 case GEO_PARENT:
5523 val = ptr->parent;
5524 break;
5525 case GEO_ISO2:
5526 case GEO_ISO3:
5527 {
5528 str = geotype == GEO_ISO2 ? ptr->iso2W : ptr->iso3W;
5529 break;
5530 }
5531 case GEO_RFC1766:
5532 case GEO_LCID:
5533 case GEO_OFFICIALNAME:
5534 case GEO_TIMEZONES:
5536 case GEO_LATITUDE:
5537 case GEO_LONGITUDE:
5538 FIXME("type %d is not supported\n", geotype);
5540 return 0;
5541 default:
5542 WARN("unrecognized type %d\n", geotype);
5544 return 0;
5545 }
5546
5547 if (val) {
5548 static const WCHAR fmtW[] = {'%','d',0};
5549 sprintfW(buffW, fmtW, val);
5550 str = buffW;
5551 }
5552
5553 len = strlenW(str) + 1;
5554 if (!data || !data_len)
5555 return len;
5556
5557 memcpy(data, str, min(len, data_len)*sizeof(WCHAR));
5558 if (data_len < len)
5560 return data_len < len ? 0 : len;
5561}
#define WARN(fmt,...)
Definition: precomp.h:61
static const struct geoinfo_t * get_geoinfo_dataptr(GEOID geoid)
Definition: locale.c:5464
GLuint GLfloat * val
Definition: glext.h:7180
long LONG
Definition: pedump.c:60
const WCHAR * str
@ GEO_ISO3
Definition: winnls.h:568
@ GEO_OFFICIALLANGUAGES
Definition: winnls.h:574
@ GEO_OFFICIALNAME
Definition: winnls.h:572
@ GEO_TIMEZONES
Definition: winnls.h:573
@ GEO_FRIENDLYNAME
Definition: winnls.h:571
@ GEO_LONGITUDE
Definition: winnls.h:566
@ GEO_ISO_UN_NUMBER
Definition: winnls.h:575
@ GEO_PARENT
Definition: winnls.h:576
@ GEO_ISO2
Definition: winnls.h:567
@ GEO_LATITUDE
Definition: winnls.h:565
@ GEO_NATION
Definition: winnls.h:564
@ GEO_LCID
Definition: winnls.h:570
@ GEO_RFC1766
Definition: winnls.h:569

Referenced by CreateLocationsList(), GetGeoInfoA(), InitFunctionPointers(), LocationsEnumProc(), and SetUserLocaleName().

◆ GetLocaleInfoA()

INT WINAPI GetLocaleInfoA ( LCID  lcid,
LCTYPE  lctype,
LPSTR  buffer,
INT  len 
)

Definition at line 1600 of file locale.c.

1601{
1602 WCHAR *bufferW;
1603 INT lenW, ret;
1604
1605 TRACE( "(lcid=0x%x,lctype=0x%x,%p,%d)\n", lcid, lctype, buffer, len );
1606
1607 if (len < 0 || (len && !buffer))
1608 {
1610 return 0;
1611 }
1612 if (((lctype & ~LOCALE_LOCALEINFOFLAGSMASK) == LOCALE_SSHORTTIME) ||
1614 {
1616 return 0;
1617 }
1618
1619 if (!len) buffer = NULL;
1620
1621 if (!(lenW = GetLocaleInfoW( lcid, lctype, NULL, 0 ))) return 0;
1622
1623 if (!(bufferW = HeapAlloc( GetProcessHeap(), 0, lenW * sizeof(WCHAR) )))
1624 {
1626 return 0;
1627 }
1628 if ((ret = GetLocaleInfoW( lcid, lctype, bufferW, lenW )))
1629 {
1630 if ((lctype & LOCALE_RETURN_NUMBER) ||
1632 {
1633 /* it's not an ASCII string, just bytes */
1634 ret *= sizeof(WCHAR);
1635 if (buffer)
1636 {
1637 if (ret <= len) memcpy( buffer, bufferW, ret );
1638 else
1639 {
1641 ret = 0;
1642 }
1643 }
1644 }
1645 else
1646 {
1648 if (!(lctype & LOCALE_USE_CP_ACP)) codepage = get_lcid_codepage( lcid );
1649 ret = WideCharToMultiByte( codepage, 0, bufferW, ret, buffer, len, NULL, NULL );
1650 }
1651 }
1652 HeapFree( GetProcessHeap(), 0, bufferW );
1653 return ret;
1654}
#define LOCALE_LOCALEINFOFLAGSMASK
Definition: locale.c:58
#define LOCALE_SSHORTTIME
Definition: winnls.h:165

Referenced by __GetLocaleInfoUsingACP(), __GetLocaleName(), __intGetACP(), __intGetOCP(), _Locale_monetary_create(), _Locale_n_cs_precedes(), _Locale_n_sep_by_space(), _Locale_n_sign_posn(), _Locale_numeric_create(), _Locale_p_cs_precedes(), _Locale_p_sep_by_space(), _Locale_p_sign_posn(), _Locale_time_create(), compare_info(), detect_locale(), DosGetCountryInfo(), EnumLocalesProcA(), filetime_to_str(), is_rtl(), lcid_to_rfc1766A(), lineGetTranslateCapsA(), MSVCRT__create_locale(), MSVCRT_locale_to_LCID(), NLS_EnumDateFormats(), NLS_EnumTimeFormats(), START_TEST(), test__Gettnames(), test_EM_POSFROMCHAR(), test_EM_SETCHARFORMAT(), test_EnumDateFormatsA(), test_EnumTimeFormatsA(), test_EnumTimeFormatsW(), test_firstDay(), test_GetAcceptLanguagesA(), test_GetLocaleInfoA(), test_GetLocaleInfoW(), test_hittest(), test_invariant(), test_setlocale(), test_threadcp(), test_VarAbs(), test_VarCat(), test_VarFormat(), test_VarFormatNumber(), test_VarRound(), test_wm_set_get_text(), update_threadlocinfo_category(), and VerLanguageNameA().

◆ GetLocaleInfoW()

INT WINAPI GetLocaleInfoW ( LCID  lcid,
LCTYPE  lctype,
LPWSTR  buffer,
INT  len 
)

Definition at line 1666 of file locale.c.

1667{
1668 LANGID lang_id;
1669 HRSRC hrsrc;
1670 HGLOBAL hmem;
1671 INT ret;
1672 UINT lcflags;
1673 const WCHAR *p;
1674 unsigned int i;
1675
1676 if (len < 0 || (len && !buffer))
1677 {
1679 return 0;
1680 }
1681 if (lctype & LOCALE_RETURN_GENITIVE_NAMES &&
1682 !is_genitive_name_supported( lctype ))
1683 {
1685 return 0;
1686 }
1687
1688 if (!len) buffer = NULL;
1689
1690 lcid = convert_default_lcid( lcid, lctype );
1691
1692 lcflags = lctype & LOCALE_LOCALEINFOFLAGSMASK;
1693 lctype &= 0xffff;
1694
1695 TRACE( "(lcid=0x%x,lctype=0x%x,%p,%d)\n", lcid, lctype, buffer, len );
1696
1697 /* first check for overrides in the registry */
1698
1699 if (!(lcflags & LOCALE_NOUSEROVERRIDE) &&
1700 lcid == convert_default_lcid( LOCALE_USER_DEFAULT, lctype ))
1701 {
1703
1704 if (value)
1705 {
1706 if (lcflags & LOCALE_RETURN_NUMBER)
1707 {
1708 WCHAR tmp[16];
1709 ret = get_registry_locale_info( value, tmp, sizeof(tmp)/sizeof(WCHAR) );
1710 if (ret > 0)
1711 {
1712 WCHAR *end;
1714 if (*end) /* invalid number */
1715 {
1717 return 0;
1718 }
1719 ret = sizeof(UINT)/sizeof(WCHAR);
1720 if (!buffer) return ret;
1721 if (ret > len)
1722 {
1724 return 0;
1725 }
1726 memcpy( buffer, &number, sizeof(number) );
1727 }
1728 }
1730
1731 if (ret != -1) return ret;
1732 }
1733 }
1734
1735 /* now load it from kernel resources */
1736
1737 lang_id = LANGIDFROMLCID( lcid );
1738
1739 /* replace SUBLANG_NEUTRAL by SUBLANG_DEFAULT */
1740 if (SUBLANGID(lang_id) == SUBLANG_NEUTRAL) lang_id = get_default_sublang( lang_id );
1741
1743 ULongToPtr((lctype >> 4) + 1), lang_id )))
1744 {
1745 SetLastError( ERROR_INVALID_FLAGS ); /* no such lctype */
1746 return 0;
1747 }
1748 if (!(hmem = LoadResource( kernel32_handle, hrsrc )))
1749 return 0;
1750
1751 p = LockResource( hmem );
1752 for (i = 0; i < (lctype & 0x0f); i++) p += *p + 1;
1753
1754 if (lcflags & LOCALE_RETURN_NUMBER) ret = sizeof(UINT)/sizeof(WCHAR);
1755 else if (is_genitive_name_supported( lctype ) && *p)
1756 {
1757 /* genitive form's stored after a null separator from a nominative */
1758 for (i = 1; i <= *p; i++) if (!p[i]) break;
1759
1760 if (i <= *p && (lcflags & LOCALE_RETURN_GENITIVE_NAMES))
1761 {
1762 ret = *p - i + 1;
1763 p += i;
1764 }
1765 else ret = i;
1766 }
1767 else
1768 ret = (lctype == LOCALE_FONTSIGNATURE) ? *p : *p + 1;
1769
1770 if (!buffer) return ret;
1771
1772 if (ret > len)
1773 {
1775 return 0;
1776 }
1777
1778 if (lcflags & LOCALE_RETURN_NUMBER)
1779 {
1780 UINT number;
1781 WCHAR *end, *tmp = HeapAlloc( GetProcessHeap(), 0, (*p + 1) * sizeof(WCHAR) );
1782 if (!tmp) return 0;
1783 memcpy( tmp, p + 1, *p * sizeof(WCHAR) );
1784 tmp[*p] = 0;
1786 if (!*end)
1787 memcpy( buffer, &number, sizeof(number) );
1788 else /* invalid number */
1789 {
1791 ret = 0;
1792 }
1793 HeapFree( GetProcessHeap(), 0, tmp );
1794
1795 TRACE( "(lcid=0x%x,lctype=0x%x,%p,%d) returning number %d\n",
1796 lcid, lctype, buffer, len, number );
1797 }
1798 else
1799 {
1800 memcpy( buffer, p + 1, ret * sizeof(WCHAR) );
1801 if (lctype != LOCALE_FONTSIGNATURE) buffer[ret-1] = 0;
1802
1803 TRACE( "(lcid=0x%x,lctype=0x%x,%p,%d) returning %d %s\n",
1804 lcid, lctype, buffer, len, ret, debugstr_w(buffer) );
1805 }
1806 return ret;
1807}
#define ULongToPtr(ul)
Definition: basetsd.h:92
LPVOID WINAPI LockResource(HGLOBAL handle)
Definition: res.c:550
HRSRC WINAPI FindResourceExW(HMODULE hModule, LPCWSTR type, LPCWSTR name, WORD lang)
Definition: res.c:164
HGLOBAL WINAPI LoadResource(HINSTANCE hModule, HRSRC hRsrc)
Definition: res.c:532
static struct registry_value * get_locale_registry_value(DWORD lctype)
Definition: locale.c:1452
static INT get_registry_locale_info(struct registry_value *registry_value, LPWSTR buffer, INT len)
Definition: locale.c:1468
static LCID convert_default_lcid(LCID lcid, LCTYPE lctype)
Definition: locale.c:587
static BOOL is_genitive_name_supported(LCTYPE lctype)
Definition: locale.c:738
static int get_value_base_by_lctype(LCTYPE lctype)
Definition: locale.c:1656
GLuint GLuint end
Definition: gl.h:1545
static unsigned int number
Definition: dsound.c:1479
#define strtolW(s, e, b)
Definition: unicode.h:39
DWORD lctype
Definition: locale.c:213
Definition: pdh_main.c:96

Referenced by __acrt_get_qualified_locale_downlevel(), __acrt_GetLocaleInfoEx(), __crtGetLocaleInfoW(), _WLocale_abbrev_dayofweek(), _WLocale_abbrev_monthname(), _WLocale_am_str(), _WLocale_currency_symbol(), _WLocale_decimal_point(), _WLocale_full_dayofweek(), _WLocale_full_monthname(), _WLocale_int_curr_symbol(), _WLocale_negative_sign(), _WLocale_pm_str(), _WLocale_positive_sign(), _WLocale_thousands_sep(), AboutDlgProc(), add_cert_to_list(), add_cert_to_view(), add_date_string_to_control(), AddCommasW(), AddNewKbLayoutsByLcid(), AddNewLayout(), AllSysInfo(), CConfigParser::CacheINI(), CountryEnumProc(), create_utc_string(), CreateLanguagesList(), CreateLayoutIcon(), CreateSortList(), date_parse(), date_to_string(), dateobj_to_date_string(), DATETIME_GetFieldWidth(), DATETIME_ReturnTxt(), DATETIME_SetFormatW(), detect_locale(), enum_locale_ex_proc(), enum_locales_proc(), fill_language_information(), FillMonthsComboBox(), FillNumberFmt(), fnIMultiLanguage3_GetRfc1766Info(), fnIMultiLanguage_GetRfc1766Info(), format_long_date(), format_size(), FormatInteger(), GeneralPropertyPageLocalesEnumProc(), get_countrycode(), get_date_format(), get_decimal_sep(), get_dummy_preferred_ui_language(), get_input_codepage(), get_lcid_codepage(), get_locale(), GetCalendarInfoW(), CicProfile::GetCodePageA(), GetCurrencyFormatW(), GetFileVersion(), GetFontSig(), GetHKLName(), GetKeyboardLayoutCP(), GetLocaleInfoA(), GetLocalizedSMFolderName(), GetNumberFormatW(), CConfigParser::GetSectionString(), InatCreateIconBySize(), InitializeDefaultUserLocale(), InitLanguagesList(), InputList_Add(), InputList_Create(), Int64GetNumFormat(), IntGetCodePageEntry(), is_default_metric(), IsBiDiLocalizedSystem(), IsLayoutExists(), LangCountryEnumProc(), LanguageEnumProc(), lcid_to_rfc1766W(), LOCALE_Init(), LOCALE_InitRegistry(), locale_update_registry(), LocaleList_Create(), LocalesEnumProc(), MONTHCAL_LButtonDown(), MONTHCAL_PaintTitle(), MONTHCAL_SetFirstDayOfWeek(), MonthCalFirstDayOfWeek(), MonthCalReload(), MSVCRT__create_locale(), NLS_EnumCalendarInfo(), NLS_EnumDateFormats(), NLS_EnumTimeFormats(), NLS_GetLocaleNumber(), NLS_GetLocaleString(), ParseDate(), ProcessCodePage(), ReadChmSystem(), SaveFontSubstitutionSettings(), SaveSystemSettings(), ScriptRecordDigitSubstitution(), SetUserLocaleName(), SH_FormatInteger(), SortEnumProc(), START_TEST(), test_EnumTimeFormatsW(), test_GetLocaleInfoEx(), test_GetLocaleInfoW(), test_unicode_wm_char(), test_VarWeekdayName(), TestDefaultLanguage(), TranslateCharsetInfo(), UPDOWN_GetThousandSep(), VarBstrFromDate(), VarDateFromStr(), VarFormatCurrency(), VarFormatNumber(), VARIANT_BstrReplaceDecimal(), VARIANT_FormatDate(), VARIANT_FormatNumber(), VARIANT_GetLocalisedNumberChars(), VarMonthName(), VarWeekdayName(), VerLanguageNameW(), and WriteUserLocale().

◆ GetLocalisedText()

UINT GetLocalisedText ( IN UINT  uID,
IN LPWSTR  lpszDest,
IN UINT  cchDest 
)

◆ GetOEMCP()

◆ GetStringTypeA()

BOOL WINAPI GetStringTypeA ( LCID  locale,
DWORD  type,
LPCSTR  src,
INT  count,
LPWORD  chartype 
)

Definition at line 3209 of file locale.c.

3210{
3211 UINT cp;
3212 INT countW;
3213 LPWSTR srcW;
3214 BOOL ret = FALSE;
3215
3216 if(count == -1) count = strlen(src) + 1;
3217
3218 if (!(cp = get_lcid_codepage( locale )))
3219 {
3220 FIXME("For locale %04x using current ANSI code page\n", locale);
3221 cp = GetACP();
3222 }
3223
3224 countW = MultiByteToWideChar(cp, 0, src, count, NULL, 0);
3225 if((srcW = HeapAlloc(GetProcessHeap(), 0, countW * sizeof(WCHAR))))
3226 {
3227 MultiByteToWideChar(cp, 0, src, count, srcW, countW);
3228 /*
3229 * NOTE: the target buffer has 1 word for each CHARACTER in the source
3230 * string, with multibyte characters there maybe be more bytes in count
3231 * than character space in the buffer!
3232 */
3233 ret = GetStringTypeW(type, srcW, countW, chartype);
3234 HeapFree(GetProcessHeap(), 0, srcW);
3235 }
3236 return ret;
3237}
UINT WINAPI GetACP(void)
Definition: locale.c:2021
BOOL WINAPI GetStringTypeW(DWORD type, LPCWSTR src, INT count, LPWORD chartype)
Definition: locale.c:3095
unsigned int BOOL
Definition: ntddk_ex.h:94
POINT cp
Definition: magnifier.c:59

Referenced by _Locale_ctype_create(), GetStringTypeExA(), IsCharSpaceA(), and MSVCRT__create_locale().

◆ GetStringTypeExA()

BOOL WINAPI GetStringTypeExA ( LCID  locale,
DWORD  type,
LPCSTR  src,
INT  count,
LPWORD  chartype 
)

Definition at line 3256 of file locale.c.

3257{
3258 return GetStringTypeA(locale, type, src, count, chartype);
3259}
BOOL WINAPI GetStringTypeA(LCID locale, DWORD type, LPCSTR src, INT count, LPWORD chartype)
Definition: locale.c:3209

Referenced by _isctype_l().

◆ GetStringTypeExW()

BOOL WINAPI GetStringTypeExW ( LCID  locale,
DWORD  type,
LPCWSTR  src,
INT  count,
LPWORD  chartype 
)

Definition at line 3185 of file locale.c.

3186{
3187 /* locale is ignored for Unicode */
3188 return GetStringTypeW( type, src, count, chartype );
3189}

◆ GetStringTypeW()

BOOL WINAPI GetStringTypeW ( DWORD  type,
LPCWSTR  src,
INT  count,
LPWORD  chartype 
)

Definition at line 3095 of file locale.c.

3096{
3097 static const unsigned char type2_map[16] =
3098 {
3099 C2_NOTAPPLICABLE, /* unassigned */
3100 C2_LEFTTORIGHT, /* L */
3101 C2_RIGHTTOLEFT, /* R */
3102 C2_EUROPENUMBER, /* EN */
3103 C2_EUROPESEPARATOR, /* ES */
3104 C2_EUROPETERMINATOR, /* ET */
3105 C2_ARABICNUMBER, /* AN */
3106 C2_COMMONSEPARATOR, /* CS */
3107 C2_BLOCKSEPARATOR, /* B */
3108 C2_SEGMENTSEPARATOR, /* S */
3109 C2_WHITESPACE, /* WS */
3110 C2_OTHERNEUTRAL, /* ON */
3111 C2_RIGHTTOLEFT, /* AL */
3112 C2_NOTAPPLICABLE, /* NSM */
3113 C2_NOTAPPLICABLE, /* BN */
3114 C2_OTHERNEUTRAL /* LRE, LRO, RLE, RLO, PDF */
3115 };
3116
3117 if (!src)
3118 {
3120 return FALSE;
3121 }
3122
3123 if (count == -1) count = strlenW(src) + 1;
3124 switch(type)
3125 {
3126 case CT_CTYPE1:
3127 while (count--) *chartype++ = get_char_typeW( *src++ ) & 0xfff;
3128 break;
3129 case CT_CTYPE2:
3130 while (count--) *chartype++ = type2_map[get_char_typeW( *src++ ) >> 12];
3131 break;
3132 case CT_CTYPE3:
3133 {
3134 WARN("CT_CTYPE3: semi-stub.\n");
3135 while (count--)
3136 {
3137 int c = *src;
3138 WORD type1, type3 = 0; /* C3_NOTAPPLICABLE */
3139
3140 type1 = get_char_typeW( *src++ ) & 0xfff;
3141 /* try to construct type3 from type1 */
3142 if(type1 & C1_SPACE) type3 |= C3_SYMBOL;
3143 if(type1 & C1_ALPHA) type3 |= C3_ALPHA;
3144 if ((c>=0x30A0)&&(c<=0x30FF)) type3 |= C3_KATAKANA;
3145 if ((c>=0x3040)&&(c<=0x309F)) type3 |= C3_HIRAGANA;
3146 if ((c>=0x4E00)&&(c<=0x9FAF)) type3 |= C3_IDEOGRAPH;
3147 if (c == 0x0640) type3 |= C3_KASHIDA;
3148 if ((c>=0x3000)&&(c<=0x303F)) type3 |= C3_SYMBOL;
3149
3150 if ((c>=0xD800)&&(c<=0xDBFF)) type3 |= C3_HIGHSURROGATE;
3151 if ((c>=0xDC00)&&(c<=0xDFFF)) type3 |= C3_LOWSURROGATE;
3152
3153 if ((c>=0xFF00)&&(c<=0xFF60)) type3 |= C3_FULLWIDTH;
3154 if ((c>=0xFF00)&&(c<=0xFF20)) type3 |= C3_SYMBOL;
3155 if ((c>=0xFF3B)&&(c<=0xFF40)) type3 |= C3_SYMBOL;
3156 if ((c>=0xFF5B)&&(c<=0xFF60)) type3 |= C3_SYMBOL;
3157 if ((c>=0xFF21)&&(c<=0xFF3A)) type3 |= C3_ALPHA;
3158 if ((c>=0xFF41)&&(c<=0xFF5A)) type3 |= C3_ALPHA;
3159 if ((c>=0xFFE0)&&(c<=0xFFE6)) type3 |= C3_FULLWIDTH;
3160 if ((c>=0xFFE0)&&(c<=0xFFE6)) type3 |= C3_SYMBOL;
3161
3162 if ((c>=0xFF61)&&(c<=0xFFDC)) type3 |= C3_HALFWIDTH;
3163 if ((c>=0xFF61)&&(c<=0xFF64)) type3 |= C3_SYMBOL;
3164 if ((c>=0xFF65)&&(c<=0xFF9F)) type3 |= C3_KATAKANA;
3165 if ((c>=0xFF65)&&(c<=0xFF9F)) type3 |= C3_ALPHA;
3166 if ((c>=0xFFE8)&&(c<=0xFFEE)) type3 |= C3_HALFWIDTH;
3167 if ((c>=0xFFE8)&&(c<=0xFFEE)) type3 |= C3_SYMBOL;
3168 *chartype++ = type3;
3169 }
3170 break;
3171 }
3172 default:
3174 return FALSE;
3175 }
3176 return TRUE;
3177}
unsigned short WORD
Definition: ntddk_ex.h:93
const GLubyte * c
Definition: glext.h:8905
#define C1_SPACE
Definition: unicode.h:34
#define C1_ALPHA
Definition: unicode.h:39
WINE_UNICODE_INLINE unsigned short get_char_typeW(WCHAR ch)
Definition: unicode.h:149
#define C2_ARABICNUMBER
Definition: winnls.h:257
#define C3_FULLWIDTH
Definition: winnls.h:271
#define C3_ALPHA
Definition: winnls.h:275
#define C2_OTHERNEUTRAL
Definition: winnls.h:262
#define C2_LEFTTORIGHT
Definition: winnls.h:252
#define CT_CTYPE2
Definition: winnls.h:240
#define C3_IDEOGRAPH
Definition: winnls.h:272
#define CT_CTYPE3
Definition: winnls.h:241
#define CT_CTYPE1
Definition: winnls.h:239
#define C3_HALFWIDTH
Definition: winnls.h:270
#define C2_EUROPENUMBER
Definition: winnls.h:254
#define C3_SYMBOL
Definition: winnls.h:267
#define C3_LOWSURROGATE
Definition: winnls.h:278
#define C2_COMMONSEPARATOR
Definition: winnls.h:258
#define C3_KATAKANA
Definition: winnls.h:268
#define C2_EUROPESEPARATOR
Definition: winnls.h:255
#define C2_EUROPETERMINATOR
Definition: winnls.h:256
#define C2_SEGMENTSEPARATOR
Definition: winnls.h:260
#define C3_KASHIDA
Definition: winnls.h:273
#define C2_RIGHTTOLEFT
Definition: winnls.h:253
#define C3_HIRAGANA
Definition: winnls.h:269
#define C2_WHITESPACE
Definition: winnls.h:261
#define C3_HIGHSURROGATE
Definition: winnls.h:277
#define C2_NOTAPPLICABLE
Definition: winnls.h:263
#define C2_BLOCKSEPARATOR
Definition: winnls.h:259

Referenced by __acrt_GetStringTypeA(), __crtGetStringTypeW(), _Locale_ctype_create(), _setmbcp_l(), _Success_(), _WLocale_ctype(), DoWordBreakProc(), get_char_script(), GetC1Type(), GetStringType3ExW(), GetStringTypeA(), GetStringTypeExW(), IsBlankLine(), IsCharBlankW(), IsCharCntrlW(), IsCharDigitW(), IsCharPunctW(), IsCharSpaceW(), IsCharXDigitW(), isdigitW(), SampCheckPassword(), test_crtGetStringTypeW(), and test_GetStringTypeW().

◆ GetSystemDefaultLangID()

◆ GetSystemDefaultLCID()

◆ GetSystemDefaultLocaleName()

INT WINAPI GetSystemDefaultLocaleName ( LPWSTR  localename,
INT  len 
)

Definition at line 1241 of file locale.c.

1242{
1243 LCID lcid = GetSystemDefaultLCID();
1244 return LCIDToLocaleName(lcid, localename, len, 0);
1245}
WINBASEAPI int WINAPI LCIDToLocaleName(_In_ LCID Locale, _Out_writes_opt_(cchName) LPWSTR lpName, _In_ int cchName, _In_ DWORD dwFlags)

◆ GetSystemDefaultUILanguage()

LANGID WINAPI GetSystemDefaultUILanguage ( void  )

Definition at line 1395 of file locale.c.

1396{
1397 LANGID lang;
1399 return lang;
1400}
NTSTATUS NTAPI NtQueryInstallUILanguage(OUT LANGID *LanguageId)
Definition: locale.c:611

Referenced by LsaLookupPrivilegeDisplayName(), and SHGetWebFolderFilePathW().

◆ GetSystemPreferredUILanguages()

BOOL WINAPI GetSystemPreferredUILanguages ( DWORD  flags,
ULONG count,
WCHAR buffer,
ULONG size 
)

Definition at line 1296 of file locale.c.

1297{
1298 if (flags & ~(MUI_LANGUAGE_NAME | MUI_LANGUAGE_ID | MUI_MACHINE_LANGUAGE_SETTINGS))
1299 {
1301 return FALSE;
1302 }
1303 if ((flags & MUI_LANGUAGE_NAME) && (flags & MUI_LANGUAGE_ID))
1304 {
1306 return FALSE;
1307 }
1308 if (*size && !buffer)
1309 {
1311 return FALSE;
1312 }
1313
1315}
static BOOL get_dummy_preferred_ui_language(DWORD flags, ULONG *count, WCHAR *buffer, ULONG *size)
Definition: locale.c:1247

Referenced by InitFunctionPointers().

◆ GetThreadLocale()

◆ GetThreadPreferredUILanguages()

BOOL WINAPI GetThreadPreferredUILanguages ( DWORD  flags,
ULONG count,
WCHAR buf,
ULONG size 
)

Definition at line 1329 of file locale.c.

1330{
1331 FIXME( "%08x, %p, %p %p\n", flags, count, buf, size );
1333}

Referenced by InitFunctionPointers().

◆ GetUserDefaultLangID()

◆ GetUserDefaultLCID()

◆ GetUserDefaultLocaleName()

INT WINAPI GetUserDefaultLocaleName ( LPWSTR  localename,
int  buffersize 
)

Definition at line 5646 of file locale.c.

5647{
5648 LCID userlcid;
5649
5650 TRACE("%p, %d\n", localename, buffersize);
5651
5652 userlcid = GetUserDefaultLCID();
5653 return LCIDToLocaleName(userlcid, localename, buffersize, 0);
5654}

◆ GetUserDefaultUILanguage()

LANGID WINAPI GetUserDefaultUILanguage ( void  )

◆ GetUserGeoID()

GEOID WINAPI GetUserGeoID ( GEOCLASS  GeoClass)

Definition at line 4838 of file locale.c.

4839{
4841 static const WCHAR geoW[] = {'G','e','o',0};
4842 static const WCHAR nationW[] = {'N','a','t','i','o','n',0};
4843 WCHAR bufferW[40], *end;
4844 DWORD count;
4845 HANDLE hkey, hSubkey = 0;
4846 UNICODE_STRING keyW;
4848 RtlInitUnicodeString( &keyW, nationW );
4849 count = sizeof(bufferW);
4850
4851 if(!(hkey = create_registry_key())) return ret;
4852
4853 switch( GeoClass ){
4854 case GEOCLASS_NATION:
4855 if ((hSubkey = NLS_RegOpenKey(hkey, geoW)))
4856 {
4857 if((NtQueryValueKey(hSubkey, &keyW, KeyValuePartialInformation,
4858 bufferW, count, &count) == STATUS_SUCCESS ) && info->DataLength)
4859 ret = strtolW((LPCWSTR)info->Data, &end, 10);
4860 }
4861 break;
4862 case GEOCLASS_REGION:
4863 FIXME("GEOCLASS_REGION not handled yet\n");
4864 break;
4865 }
4866
4867 NtClose(hkey);
4868 if (hSubkey) NtClose(hSubkey);
4869 return ret;
4870}
static HANDLE NLS_RegOpenKey(HANDLE hRootKey, LPCWSTR szKeyName)
Definition: locale.c:4353
ULONG GEOID
Definition: mui.h:28
#define GEOID_NOT_AVAILABLE
Definition: winnls.h:13

Referenced by CreateLocationsList(), and SetUserLocaleName().

◆ IdnToAscii()

INT WINAPI IdnToAscii ( DWORD  dwFlags,
LPCWSTR  lpUnicodeCharStr,
INT  cchUnicodeChar,
LPWSTR  lpASCIICharStr,
INT  cchASCIIChar 
)

Definition at line 5703 of file locale.c.

5705{
5706 static const WCHAR prefixW[] = {'x','n','-','-'};
5707
5708 WCHAR *norm_str;
5709 INT i, label_start, label_end, norm_len, out_label, out = 0;
5710
5711 TRACE("%x %p %d %p %d\n", dwFlags, lpUnicodeCharStr, cchUnicodeChar,
5712 lpASCIICharStr, cchASCIIChar);
5713
5714 norm_len = IdnToNameprepUnicode(dwFlags, lpUnicodeCharStr, cchUnicodeChar, NULL, 0);
5715 if(!norm_len)
5716 return 0;
5717 norm_str = HeapAlloc(GetProcessHeap(), 0, norm_len*sizeof(WCHAR));
5718 if(!norm_str) {
5720 return 0;
5721 }
5722 norm_len = IdnToNameprepUnicode(dwFlags, lpUnicodeCharStr,
5723 cchUnicodeChar, norm_str, norm_len);
5724 if(!norm_len) {
5725 HeapFree(GetProcessHeap(), 0, norm_str);
5726 return 0;
5727 }
5728
5729 for(label_start=0; label_start<norm_len;) {
5730 INT n = INIT_N, bias = INIT_BIAS;
5731 INT delta = 0, b = 0, h;
5732
5733 out_label = out;
5734 for(i=label_start; i<norm_len && norm_str[i]!='.' &&
5735 norm_str[i]!=0x3002 && norm_str[i]!='\0'; i++)
5736 if(norm_str[i] < 0x80)
5737 b++;
5738 label_end = i;
5739
5740 if(b == label_end-label_start) {
5741 if(label_end < norm_len)
5742 b++;
5743 if(!lpASCIICharStr) {
5744 out += b;
5745 }else if(out+b <= cchASCIIChar) {
5746 memcpy(lpASCIICharStr+out, norm_str+label_start, b*sizeof(WCHAR));
5747 out += b;
5748 }else {
5749 HeapFree(GetProcessHeap(), 0, norm_str);
5751 return 0;
5752 }
5753 label_start = label_end+1;
5754 continue;
5755 }
5756
5757 if(!lpASCIICharStr) {
5758 out += 5+b; /* strlen(xn--...-) */
5759 }else if(out+5+b <= cchASCIIChar) {
5760 memcpy(lpASCIICharStr+out, prefixW, sizeof(prefixW));
5761 out += 4;
5762 for(i=label_start; i<label_end; i++)
5763 if(norm_str[i] < 0x80)
5764 lpASCIICharStr[out++] = norm_str[i];
5765 lpASCIICharStr[out++] = '-';
5766 }else {
5767 HeapFree(GetProcessHeap(), 0, norm_str);
5769 return 0;
5770 }
5771 if(!b)
5772 out--;
5773
5774 for(h=b; h<label_end-label_start;) {
5775 INT m = 0xffff, q, k;
5776
5777 for(i=label_start; i<label_end; i++) {
5778 if(norm_str[i]>=n && m>norm_str[i])
5779 m = norm_str[i];
5780 }
5781 delta += (m-n)*(h+1);
5782 n = m;
5783
5784 for(i=label_start; i<label_end; i++) {
5785 if(norm_str[i] < n) {
5786 delta++;
5787 }else if(norm_str[i] == n) {
5788 for(q=delta, k=BASE; ; k+=BASE) {
5789 INT t = k<=bias ? TMIN : k>=bias+TMAX ? TMAX : k-bias;
5790 INT disp = q<t ? q : t+(q-t)%(BASE-t);
5791 if(!lpASCIICharStr) {
5792 out++;
5793 }else if(out+1 <= cchASCIIChar) {
5794 lpASCIICharStr[out++] = disp<='z'-'a' ?
5795 'a'+disp : '0'+disp-'z'+'a'-1;
5796 }else {
5797 HeapFree(GetProcessHeap(), 0, norm_str);
5799 return 0;
5800 }
5801 if(q < t)
5802 break;
5803 q = (q-t)/(BASE-t);
5804 }
5805 bias = adapt(delta, h+1, h==b);
5806 delta = 0;
5807 h++;
5808 }
5809 }
5810 delta++;
5811 n++;
5812 }
5813
5814 if(out-out_label > 63) {
5815 HeapFree(GetProcessHeap(), 0, norm_str);
5817 return 0;
5818 }
5819
5820 if(label_end < norm_len) {
5821 if(!lpASCIICharStr) {
5822 out++;
5823 }else if(out+1 <= cchASCIIChar) {
5824 lpASCIICharStr[out++] = norm_str[label_end] ? '.' : 0;
5825 }else {
5826 HeapFree(GetProcessHeap(), 0, norm_str);
5828 return 0;
5829 }
5830 }
5831 label_start = label_end+1;
5832 }
5833
5834 HeapFree(GetProcessHeap(), 0, norm_str);
5835 return out;
5836}
#define ERROR_INVALID_NAME
Definition: compat.h:103
static INT adapt(INT delta, INT numpoints, BOOL firsttime)
Definition: locale.c:5687
INT WINAPI IdnToNameprepUnicode(DWORD dwFlags, LPCWSTR lpUnicodeCharStr, INT cchUnicodeChar, LPWSTR lpNameprepCharStr, INT cchNameprepChar)
Definition: locale.c:5841
GLdouble GLdouble t
Definition: gl.h:2047
GLdouble GLdouble GLdouble GLdouble q
Definition: gl.h:2063
GLfloat bias
Definition: glext.h:7909
GLboolean GLboolean GLboolean b
Definition: glext.h:6204
const GLfloat * m
Definition: glext.h:10848
GLfloat GLfloat GLfloat GLfloat h
Definition: glext.h:7723
#define b
Definition: ke_i.h:79
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
Definition: wcsftime.cpp:383

Referenced by InitFunctionPointers().

◆ IdnToNameprepUnicode()

INT WINAPI IdnToNameprepUnicode ( DWORD  dwFlags,
LPCWSTR  lpUnicodeCharStr,
INT  cchUnicodeChar,
LPWSTR  lpNameprepCharStr,
INT  cchNameprepChar 
)

Definition at line 5841 of file locale.c.

5843{
5844 enum {
5845 UNASSIGNED = 0x1,
5846 PROHIBITED = 0x2,
5847 BIDI_RAL = 0x4,
5848 BIDI_L = 0x8
5849 };
5850
5851 extern const unsigned short nameprep_char_type[] DECLSPEC_HIDDEN;
5852 extern const WCHAR nameprep_mapping[] DECLSPEC_HIDDEN;
5853 const WCHAR *ptr;
5854 WORD flags;
5855 WCHAR buf[64], *map_str, norm_str[64], ch;
5856 DWORD i, map_len, norm_len, mask, label_start, label_end, out = 0;
5857 BOOL have_bidi_ral, prohibit_bidi_ral, ascii_only;
5858
5859 TRACE("%x %p %d %p %d\n", dwFlags, lpUnicodeCharStr, cchUnicodeChar,
5860 lpNameprepCharStr, cchNameprepChar);
5861
5862 if(dwFlags & ~(IDN_ALLOW_UNASSIGNED|IDN_USE_STD3_ASCII_RULES)) {
5864 return 0;
5865 }
5866
5867 if(!lpUnicodeCharStr || cchUnicodeChar<-1) {
5869 return 0;
5870 }
5871
5872 if(cchUnicodeChar == -1)
5873 cchUnicodeChar = strlenW(lpUnicodeCharStr)+1;
5874 if(!cchUnicodeChar || (cchUnicodeChar==1 && lpUnicodeCharStr[0]==0)) {
5876 return 0;
5877 }
5878
5879 for(label_start=0; label_start<cchUnicodeChar;) {
5880 ascii_only = TRUE;
5881 for(i=label_start; i<cchUnicodeChar; i++) {
5882 ch = lpUnicodeCharStr[i];
5883
5884 if(i!=cchUnicodeChar-1 && !ch) {
5886 return 0;
5887 }
5888 /* check if ch is one of label separators defined in RFC3490 */
5889 if(!ch || ch=='.' || ch==0x3002 || ch==0xff0e || ch==0xff61)
5890 break;
5891
5892 if(ch > 0x7f) {
5893 ascii_only = FALSE;
5894 continue;
5895 }
5896
5897 if((dwFlags&IDN_USE_STD3_ASCII_RULES) == 0)
5898 continue;
5899 if((ch>='a' && ch<='z') || (ch>='A' && ch<='Z')
5900 || (ch>='0' && ch<='9') || ch=='-')
5901 continue;
5902
5904 return 0;
5905 }
5906 label_end = i;
5907 /* last label may be empty */
5908 if(label_start==label_end && ch) {
5910 return 0;
5911 }
5912
5913 if((dwFlags&IDN_USE_STD3_ASCII_RULES) && (lpUnicodeCharStr[label_start]=='-' ||
5914 lpUnicodeCharStr[label_end-1]=='-')) {
5916 return 0;
5917 }
5918
5919 if(ascii_only) {
5920 /* maximal label length is 63 characters */
5921 if(label_end-label_start > 63) {
5923 return 0;
5924 }
5925 if(label_end < cchUnicodeChar)
5926 label_end++;
5927
5928 if(!lpNameprepCharStr) {
5929 out += label_end-label_start;
5930 }else if(out+label_end-label_start <= cchNameprepChar) {
5931 memcpy(lpNameprepCharStr+out, lpUnicodeCharStr+label_start,
5932 (label_end-label_start)*sizeof(WCHAR));
5933 if(lpUnicodeCharStr[label_end-1] > 0x7f)
5934 lpNameprepCharStr[out+label_end-label_start-1] = '.';
5935 out += label_end-label_start;
5936 }else {
5938 return 0;
5939 }
5940
5941 label_start = label_end;
5942 continue;
5943 }
5944
5945 map_len = 0;
5946 for(i=label_start; i<label_end; i++) {
5947 ch = lpUnicodeCharStr[i];
5949 ptr = nameprep_mapping + ptr[(ch>>4)&0x0f] + 3*(ch&0x0f);
5950
5951 if(!ptr[0]) map_len++;
5952 else if(!ptr[1]) map_len++;
5953 else if(!ptr[2]) map_len += 2;
5954 else if(ptr[0]!=0xffff || ptr[1]!=0xffff || ptr[2]!=0xffff) map_len += 3;
5955 }
5956 if(map_len*sizeof(WCHAR) > sizeof(buf)) {
5957 map_str = HeapAlloc(GetProcessHeap(), 0, map_len*sizeof(WCHAR));
5958 if(!map_str) {
5960 return 0;
5961 }
5962 }else {
5963 map_str = buf;
5964 }
5965 map_len = 0;
5966 for(i=label_start; i<label_end; i++) {
5967 ch = lpUnicodeCharStr[i];
5969 ptr = nameprep_mapping + ptr[(ch>>4)&0x0f] + 3*(ch&0x0f);
5970
5971 if(!ptr[0]) {
5972 map_str[map_len++] = ch;
5973 }else if(!ptr[1]) {
5974 map_str[map_len++] = ptr[0];
5975 }else if(!ptr[2]) {
5976 map_str[map_len++] = ptr[0];
5977 map_str[map_len++] = ptr[1];
5978 }else if(ptr[0]!=0xffff || ptr[1]!=0xffff || ptr[2]!=0xffff) {
5979 map_str[map_len++] = ptr[0];
5980 map_str[map_len++] = ptr[1];
5981 map_str[map_len++] = ptr[2];
5982 }
5983 }
5984
5985 norm_len = FoldStringW(MAP_FOLDCZONE, map_str, map_len,
5986 norm_str, sizeof(norm_str)/sizeof(WCHAR)-1);
5987 if(map_str != buf)
5988 HeapFree(GetProcessHeap(), 0, map_str);
5989 if(!norm_len) {
5992 return 0;
5993 }
5994
5995 if(label_end < cchUnicodeChar) {
5996 norm_str[norm_len++] = lpUnicodeCharStr[label_end] ? '.' : 0;
5997 label_end++;
5998 }
5999
6000 if(!lpNameprepCharStr) {
6001 out += norm_len;
6002 }else if(out+norm_len <= cchNameprepChar) {
6003 memcpy(lpNameprepCharStr+out, norm_str, norm_len*sizeof(WCHAR));
6004 out += norm_len;
6005 }else {
6007 return 0;
6008 }
6009
6010 have_bidi_ral = prohibit_bidi_ral = FALSE;
6011 mask = PROHIBITED;
6012 if((dwFlags&IDN_ALLOW_UNASSIGNED) == 0)
6013 mask |= UNASSIGNED;
6014 for(i=0; i<norm_len; i++) {
6015 ch = norm_str[i];
6017
6018 if(flags & mask) {
6019 SetLastError((flags & PROHIBITED) ? ERROR_INVALID_NAME
6021 return 0;
6022 }
6023
6024 if(flags & BIDI_RAL)
6025 have_bidi_ral = TRUE;
6026 if(flags & BIDI_L)
6027 prohibit_bidi_ral = TRUE;
6028 }
6029
6030 if(have_bidi_ral) {
6031 ch = norm_str[0];
6033 if((flags & BIDI_RAL) == 0)
6034 prohibit_bidi_ral = TRUE;
6035
6036 ch = norm_str[norm_len-1];
6038 if((flags & BIDI_RAL) == 0)
6039 prohibit_bidi_ral = TRUE;
6040 }
6041
6042 if(have_bidi_ral && prohibit_bidi_ral) {
6044 return 0;
6045 }
6046
6047 label_start = label_end;
6048 }
6049
6050 return out;
6051}
#define DECLSPEC_HIDDEN
Definition: precomp.h:8
static unsigned short get_table_entry(const unsigned short *table, WCHAR ch)
Definition: locale.c:277
GLenum GLint GLuint mask
Definition: glext.h:6028
const unsigned short nameprep_char_type[4432]
Definition: nameprep.c:5
const unsigned short nameprep_mapping[5856]
Definition: nameprep.c:565
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
#define ERROR_NO_UNICODE_TRANSLATION
Definition: winerror.h:649

Referenced by IdnToAscii(), and InitFunctionPointers().

◆ IdnToUnicode()

INT WINAPI IdnToUnicode ( DWORD  dwFlags,
LPCWSTR  lpASCIICharStr,
INT  cchASCIIChar,
LPWSTR  lpUnicodeCharStr,
INT  cchUnicodeChar 
)

Definition at line 6056 of file locale.c.

6058{
6059 extern const unsigned short nameprep_char_type[];
6060
6061 INT i, label_start, label_end, out_label, out = 0;
6062 WCHAR ch;
6063
6064 TRACE("%x %p %d %p %d\n", dwFlags, lpASCIICharStr, cchASCIIChar,
6065 lpUnicodeCharStr, cchUnicodeChar);
6066
6067 for(label_start=0; label_start<cchASCIIChar;) {
6068 INT n = INIT_N, pos = 0, old_pos, w, k, bias = INIT_BIAS, delim=0, digit, t;
6069
6070 out_label = out;
6071 for(i=label_start; i<cchASCIIChar; i++) {
6072 ch = lpASCIICharStr[i];
6073
6074 if(ch>0x7f || (i!=cchASCIIChar-1 && !ch)) {
6076 return 0;
6077 }
6078
6079 if(!ch || ch=='.')
6080 break;
6081 if(ch == '-')
6082 delim = i;
6083
6084 if((dwFlags&IDN_USE_STD3_ASCII_RULES) == 0)
6085 continue;
6086 if((ch>='a' && ch<='z') || (ch>='A' && ch<='Z')
6087 || (ch>='0' && ch<='9') || ch=='-')
6088 continue;
6089
6091 return 0;
6092 }
6093 label_end = i;
6094 /* last label may be empty */
6095 if(label_start==label_end && ch) {
6097 return 0;
6098 }
6099
6100 if((dwFlags&IDN_USE_STD3_ASCII_RULES) && (lpASCIICharStr[label_start]=='-' ||
6101 lpASCIICharStr[label_end-1]=='-')) {
6103 return 0;
6104 }
6105 if(label_end-label_start > 63) {
6107 return 0;
6108 }
6109
6110 if(label_end-label_start<4 ||
6111 tolowerW(lpASCIICharStr[label_start])!='x' ||
6112 tolowerW(lpASCIICharStr[label_start+1])!='n' ||
6113 lpASCIICharStr[label_start+2]!='-' || lpASCIICharStr[label_start+3]!='-') {
6114 if(label_end < cchASCIIChar)
6115 label_end++;
6116
6117 if(!lpUnicodeCharStr) {
6118 out += label_end-label_start;
6119 }else if(out+label_end-label_start <= cchUnicodeChar) {
6120 memcpy(lpUnicodeCharStr+out, lpASCIICharStr+label_start,
6121 (label_end-label_start)*sizeof(WCHAR));
6122 out += label_end-label_start;
6123 }else {
6125 return 0;
6126 }
6127
6128 label_start = label_end;
6129 continue;
6130 }
6131
6132 if(delim == label_start+3)
6133 delim++;
6134 if(!lpUnicodeCharStr) {
6135 out += delim-label_start-4;
6136 }else if(out+delim-label_start-4 <= cchUnicodeChar) {
6137 memcpy(lpUnicodeCharStr+out, lpASCIICharStr+label_start+4,
6138 (delim-label_start-4)*sizeof(WCHAR));
6139 out += delim-label_start-4;
6140 }else {
6142 return 0;
6143 }
6144 if(out != out_label)
6145 delim++;
6146
6147 for(i=delim; i<label_end;) {
6148 old_pos = pos;
6149 w = 1;
6150 for(k=BASE; ; k+=BASE) {
6151 ch = i<label_end ? tolowerW(lpASCIICharStr[i++]) : 0;
6152 if((ch<'a' || ch>'z') && (ch<'0' || ch>'9')) {
6154 return 0;
6155 }
6156 digit = ch<='9' ? ch-'0'+'z'-'a'+1 : ch-'a';
6157 pos += digit*w;
6158 t = k<=bias ? TMIN : k>=bias+TMAX ? TMAX : k-bias;
6159 if(digit < t)
6160 break;
6161 w *= BASE-t;
6162 }
6163 bias = adapt(pos-old_pos, out-out_label+1, old_pos==0);
6164 n += pos/(out-out_label+1);
6165 pos %= out-out_label+1;
6166
6167 if((dwFlags&IDN_ALLOW_UNASSIGNED)==0 &&
6168 get_table_entry(nameprep_char_type, n)==1/*UNASSIGNED*/) {
6170 return 0;
6171 }
6172 if(!lpUnicodeCharStr) {
6173 out++;
6174 }else if(out+1 <= cchASCIIChar) {
6175 memmove(lpUnicodeCharStr+out_label+pos+1,
6176 lpUnicodeCharStr+out_label+pos,
6177 (out-out_label-pos)*sizeof(WCHAR));
6178 lpUnicodeCharStr[out_label+pos] = n;
6179 out++;
6180 }else {
6182 return 0;
6183 }
6184 pos++;
6185 }
6186
6187 if(out-out_label > 63) {
6189 return 0;
6190 }
6191
6192 if(label_end < cchASCIIChar) {
6193 if(!lpUnicodeCharStr) {
6194 out++;
6195 }else if(out+1 <= cchUnicodeChar) {
6196 lpUnicodeCharStr[out++] = lpASCIICharStr[label_end];
6197 }else {
6199 return 0;
6200 }
6201 }
6202 label_start = label_end+1;
6203 }
6204
6205 return out;
6206}
GLubyte GLubyte GLubyte GLubyte w
Definition: glext.h:6102
#define memmove(s1, s2, n)
Definition: mkisofs.h:881
#define tolowerW(n)
Definition: unicode.h:50

Referenced by InitFunctionPointers().

◆ InvalidateNLSCache()

BOOL WINAPI InvalidateNLSCache ( void  )

Definition at line 4824 of file locale.c.

4825{
4826#ifdef __REACTOS__
4828 return TRUE;
4829#else
4830 FIXME("() stub\n");
4831 return FALSE;
4832#endif
4833}
void JapaneseEra_ClearCache(void)
Definition: japanese.c:38

◆ is_genitive_name_supported()

static BOOL is_genitive_name_supported ( LCTYPE  lctype)
static

Definition at line 738 of file locale.c.

739{
740 switch(lctype & 0xffff)
741 {
755 return TRUE;
756 default:
757 return FALSE;
758 }
759}

Referenced by GetLocaleInfoW().

◆ IsDBCSLeadByte()

◆ IsDBCSLeadByteEx()

◆ IsNormalizedString()

BOOL WINAPI IsNormalizedString ( NORM_FORM  NormForm,
LPCWSTR  lpString,
INT  cwLength 
)

Definition at line 5670 of file locale.c.

5671{
5672 FIXME("%x %p %d\n", NormForm, lpString, cwLength);
5674 return FALSE;
5675}

◆ IsValidCodePage()

◆ IsValidLanguageGroup()

BOOL WINAPI IsValidLanguageGroup ( LGRPID  lgrpid,
DWORD  dwFlags 
)

Definition at line 4624 of file locale.c.

4625{
4626 static const WCHAR szFormat[] = { '%','x','\0' };
4627 WCHAR szValueName[16], szValue[2];
4628 BOOL bSupported = FALSE, bInstalled = FALSE;
4629 HANDLE hKey;
4630
4631
4632 switch (dwFlags)
4633 {
4634 case LGRPID_INSTALLED:
4635 case LGRPID_SUPPORTED:
4636
4638
4639 sprintfW( szValueName, szFormat, lgrpid );
4640
4641 if (NLS_RegGetDword( hKey, szValueName, (LPDWORD)szValue ))
4642 {
4643 bSupported = TRUE;
4644
4645 if (szValue[0] == '1')
4646 bInstalled = TRUE;
4647 }
4648
4649 if (hKey)
4650 NtClose( hKey );
4651
4652 break;
4653 }
4654
4655 if ((dwFlags == LGRPID_SUPPORTED && bSupported) ||
4656 (dwFlags == LGRPID_INSTALLED && bInstalled))
4657 return TRUE;
4658
4659 return FALSE;
4660}
static const WCHAR szLangGroupsKeyName[]
Definition: locale.c:76
static BOOL NLS_RegGetDword(HANDLE hKey, LPCWSTR szValueName, DWORD *lpVal)
Definition: locale.c:4406
FxAutoRegKey hKey
uint32_t * LPDWORD
Definition: typedefs.h:59
#define LGRPID_INSTALLED
Definition: winnls.h:460
#define LGRPID_SUPPORTED
Definition: winnls.h:461

Referenced by InitFunctionPointers().

◆ IsValidLocale()

◆ IsValidLocaleName()

BOOL WINAPI IsValidLocaleName ( LPCWSTR  locale)

Definition at line 2934 of file locale.c.

2935{
2936 struct locale_name locale_name;
2937
2938 if (!locale)
2939 return FALSE;
2940
2941 /* string parsing */
2942 parse_locale_name( locale, &locale_name );
2943
2944 TRACE( "found lcid %x for %s, matches %d\n",
2946
2947 return locale_name.matches > 0;
2948}

Referenced by InitFunctionPointers().

◆ LCMapStringA()

INT WINAPI LCMapStringA ( LCID  lcid,
DWORD  flags,
LPCSTR  src,
INT  srclen,
LPSTR  dst,
INT  dstlen 
)

Definition at line 3831 of file locale.c.

3833{
3834 WCHAR *bufW = NtCurrentTeb()->StaticUnicodeBuffer;
3835 LPWSTR srcW, dstW;
3836 INT ret = 0, srclenW, dstlenW;
3837 UINT locale_cp = CP_ACP;
3838
3839 if (!src || !srclen || dstlen < 0)
3840 {
3842 return 0;
3843 }
3844
3845 if (!(flags & LOCALE_USE_CP_ACP)) locale_cp = get_lcid_codepage( lcid );
3846
3847 srclenW = MultiByteToWideChar(locale_cp, 0, src, srclen, bufW, 260);
3848 if (srclenW)
3849 srcW = bufW;
3850 else
3851 {
3852 srclenW = MultiByteToWideChar(locale_cp, 0, src, srclen, NULL, 0);
3853 srcW = HeapAlloc(GetProcessHeap(), 0, srclenW * sizeof(WCHAR));
3854 if (!srcW)
3855 {
3857 return 0;
3858 }
3859 MultiByteToWideChar(locale_cp, 0, src, srclen, srcW, srclenW);
3860 }
3861
3862 if (flags & LCMAP_SORTKEY)
3863 {
3864 if (src == dst)
3865 {
3867 goto map_string_exit;
3868 }
3869 ret = wine_get_sortkey(flags, srcW, srclenW, dst, dstlen);
3870 if (ret == 0)
3872 else
3873 ret++;
3874 goto map_string_exit;
3875 }
3876
3877 if (flags & SORT_STRINGSORT)
3878 {
3880 goto map_string_exit;
3881 }
3882
3883 dstlenW = LCMapStringEx(NULL, flags, srcW, srclenW, NULL, 0, NULL, NULL, 0);
3884 if (!dstlenW)
3885 goto map_string_exit;
3886
3887 dstW = HeapAlloc(GetProcessHeap(), 0, dstlenW * sizeof(WCHAR));
3888 if (!dstW)
3889 {
3891 goto map_string_exit;
3892 }
3893
3894 LCMapStringEx(NULL, flags, srcW, srclenW, dstW, dstlenW, NULL, NULL, 0);
3895 ret = WideCharToMultiByte(locale_cp, 0, dstW, dstlenW, dst, dstlen, NULL, NULL);
3896 HeapFree(GetProcessHeap(), 0, dstW);
3897
3898map_string_exit:
3899 if (srcW != bufW) HeapFree(GetProcessHeap(), 0, srcW);
3900 return ret;
3901}
int wine_get_sortkey(int flags, const WCHAR *src, int srclen, char *dst, int dstlen)
Definition: sortkey.c:33
INT WINAPI LCMapStringEx(LPCWSTR locale, DWORD flags, LPCWSTR src, INT srclen, LPWSTR dst, INT dstlen, LPNLSVERSIONINFO version, LPVOID reserved, LPARAM handle)
Definition: locale.c:3743
#define LCMAP_SORTKEY
Definition: winnls.h:188

Referenced by __crtLCMapStringA(), _Locale_strxfrm(), _Locale_tolower(), _Locale_toupper(), _strxfrm_l(), compare_string3(), lcid_to_rfc1766A(), MSVCRT__create_locale(), test_GetRfc1766FromLcid(), test_LcidToRfc1766(), and test_LCMapStringA().

◆ LCMapStringEx()

INT WINAPI LCMapStringEx ( LPCWSTR  locale,
DWORD  flags,
LPCWSTR  src,
INT  srclen,
LPWSTR  dst,
INT  dstlen,
LPNLSVERSIONINFO  version,
LPVOID  reserved,
LPARAM  handle 
)

Definition at line 3743 of file locale.c.

3745{
3746 if (version) FIXME("unsupported version structure %p\n", version);
3747 if (reserved) FIXME("unsupported reserved pointer %p\n", reserved);
3748 if (handle)
3749 {
3750 static int once;
3751 if (!once++) FIXME("unsupported lparam %Ix\n", handle);
3752 }
3753
3754 if (!src || !srclen || dstlen < 0)
3755 {
3757 return 0;
3758 }
3759
3760 if (srclen < 0) srclen = lstrlenW(src) + 1;
3761
3762 TRACE( "(%s,0x%08lx,%s,%d,%p,%d)\n",
3764
3765 flags &= ~LOCALE_USE_CP_ACP;
3766
3767 if (src == dst && (flags & ~(LCMAP_LOWERCASE | LCMAP_UPPERCASE)))
3768 {
3770 return 0;
3771 }
3772
3773 if (!dstlen) dst = NULL;
3774
3775 if (flags & LCMAP_SORTKEY)
3776 {
3777 INT ret;
3778
3779 if (srclen < 0)
3780 srclen = strlenW(src);
3781
3782 ret = wine_get_sortkey(flags, src, srclen, (char *)dst, dstlen);
3783 if (ret == 0)
3785 else
3786 ret++;
3787 return ret;
3788 }
3789
3790 /* SORT_STRINGSORT must be used exclusively with LCMAP_SORTKEY */
3791 if (flags & SORT_STRINGSORT)
3792 {
3794 return 0;
3795 }
3796
3797 return lcmap_string(flags, src, srclen, dst, dstlen);
3798}
#define debugstr_wn
Definition: kernel32.h:33
#define LCMAP_UPPERCASE
Definition: winnls.h:187
#define LCMAP_LOWERCASE
Definition: winnls.h:186

Referenced by InitFunctionPointers(), LCMapStringA(), and LCMapStringW().

◆ LCMapStringW()

INT WINAPI LCMapStringW ( LCID  lcid,
DWORD  flags,
LPCWSTR  src,
INT  srclen,
LPWSTR  dst,
INT  dstlen 
)

◆ LOCALE_Init()

void LOCALE_Init ( void  )

Definition at line 4279 of file locale.c.

4280{
4281 extern void CDECL __wine_init_codepages( const union cptable *ansi_cp, const union cptable *oem_cp,
4282 const union cptable *unix_cp );
4283
4284 UINT ansi_cp = 1252, oem_cp = 437, mac_cp = 10000, unix_cp;
4285
4286 setlocale( LC_ALL, "" );
4287
4288#ifdef __APPLE__
4289 /* MacOS doesn't set the locale environment variables so we have to do it ourselves */
4290 if (!has_env("LANG"))
4291 {
4292 const char* mac_locale = get_mac_locale();
4293
4294 setenv( "LANG", mac_locale, 1 );
4295 if (setlocale( LC_ALL, "" ))
4296 TRACE( "setting LANG to '%s'\n", mac_locale );
4297 else
4298 {
4299 /* no C library locale matching Mac locale; don't pass garbage to children */
4300 unsetenv("LANG");
4301 TRACE( "Mac locale %s is not supported by the C library\n", debugstr_a(mac_locale) );
4302 }
4303 }
4304#endif /* __APPLE__ */
4305
4306 unix_cp = setup_unix_locales();
4308
4309#ifdef __APPLE__
4310 if (!unix_cp)
4311 unix_cp = CP_UTF8; /* default to utf-8 even if we don't get a valid locale */
4312#endif
4313
4317
4320 (LPWSTR)&mac_cp, sizeof(mac_cp)/sizeof(WCHAR) );
4322 (LPWSTR)&oem_cp, sizeof(oem_cp)/sizeof(WCHAR) );
4323 if (!unix_cp)
4325 (LPWSTR)&unix_cp, sizeof(unix_cp)/sizeof(WCHAR) );
4326
4327 if (!(ansi_cptable = wine_cp_get_table( ansi_cp )))
4329 if (!(oem_cptable = wine_cp_get_table( oem_cp )))
4331 if (!(mac_cptable = wine_cp_get_table( mac_cp )))
4332 mac_cptable = wine_cp_get_table( 10000 );
4333 if (unix_cp != CP_UTF8)
4334 {
4335 if (!(unix_cptable = wine_cp_get_table( unix_cp )))
4337 }
4338
4339 __wine_init_codepages( ansi_cptable, oem_cptable, unix_cptable );
4340
4341 TRACE( "ansi=%03d oem=%03d mac=%03d unix=%03d\n",
4342 ansi_cptable->info.codepage, oem_cptable->info.codepage,
4343 mac_cptable->info.codepage, unix_cp );
4344
4345 setlocale(LC_NUMERIC, "C"); /* FIXME: oleaut32 depends on this */
4346}
#define CDECL
Definition: compat.h:29
static const union cptable * unix_cptable
Definition: locale.c:68
static UINT setup_unix_locales(void)
Definition: locale.c:1111
static LCID lcid_LC_MESSAGES
Definition: locale.c:163
#define LC_NUMERIC
Definition: locale.h:21
#define LC_ALL
Definition: locale.h:17
NTSTATUS NTAPI NtSetDefaultUILanguage(IN LANGID LanguageId)
Definition: locale.c:692
NTSTATUS NTAPI NtSetDefaultLocale(IN BOOLEAN UserProfile, IN LCID DefaultLocaleId)
Definition: locale.c:437

◆ LOCALE_InitRegistry()

void LOCALE_InitRegistry ( void  )

Definition at line 838 of file locale.c.

839{
840 static const WCHAR acpW[] = {'A','C','P',0};
841 static const WCHAR oemcpW[] = {'O','E','M','C','P',0};
842 static const WCHAR maccpW[] = {'M','A','C','C','P',0};
843 static const WCHAR localeW[] = {'L','o','c','a','l','e',0};
844 static const WCHAR lc_ctypeW[] = { 'L','C','_','C','T','Y','P','E',0 };
845 static const WCHAR lc_monetaryW[] = { 'L','C','_','M','O','N','E','T','A','R','Y',0 };
846 static const WCHAR lc_numericW[] = { 'L','C','_','N','U','M','E','R','I','C',0 };
847 static const WCHAR lc_timeW[] = { 'L','C','_','T','I','M','E',0 };
848 static const WCHAR lc_measurementW[] = { 'L','C','_','M','E','A','S','U','R','E','M','E','N','T',0 };
849 static const WCHAR lc_telephoneW[] = { 'L','C','_','T','E','L','E','P','H','O','N','E',0 };
850 static const WCHAR lc_paperW[] = { 'L','C','_','P','A','P','E','R',0};
851 static const struct
852 {
855 } update_cp_values[] = {
857 { oemcpW, LOCALE_IDEFAULTCODEPAGE },
859 };
860 static const LCTYPE lc_messages_values[] = {
863 LOCALE_SLIST };
864 static const LCTYPE lc_monetary_values[] = {
873 static const LCTYPE lc_numeric_values[] = {
877 LOCALE_IDIGITSUBSTITUTION,
883 static const LCTYPE lc_time_values[] = {
897 LOCALE_SYEARMONTH,
898 LOCALE_IDATE };
899 static const LCTYPE lc_measurement_values[] = { LOCALE_IMEASURE };
900 static const LCTYPE lc_telephone_values[] = { LOCALE_ICOUNTRY };
901 static const LCTYPE lc_paper_values[] = { LOCALE_IPAPERSIZE };
902
904 WCHAR bufferW[80];
905 DWORD count, i;
906 HANDLE hkey;
907 LCID lcid = GetUserDefaultLCID();
908
909 if (!(hkey = create_registry_key()))
910 return; /* don't do anything if we can't create the registry key */
911
912 locale_update_registry( hkey, localeW, lcid_LC_MESSAGES, lc_messages_values,
913 sizeof(lc_messages_values)/sizeof(lc_messages_values[0]) );
914 locale_update_registry( hkey, lc_monetaryW, lcid_LC_MONETARY, lc_monetary_values,
915 sizeof(lc_monetary_values)/sizeof(lc_monetary_values[0]) );
916 locale_update_registry( hkey, lc_numericW, lcid_LC_NUMERIC, lc_numeric_values,
917 sizeof(lc_numeric_values)/sizeof(lc_numeric_values[0]) );
918 locale_update_registry( hkey, lc_timeW, lcid_LC_TIME, lc_time_values,
919 sizeof(lc_time_values)/sizeof(lc_time_values[0]) );
920 locale_update_registry( hkey, lc_measurementW, lcid_LC_MEASUREMENT, lc_measurement_values,
921 sizeof(lc_measurement_values)/sizeof(lc_measurement_values[0]) );
922 locale_update_registry( hkey, lc_telephoneW, lcid_LC_TELEPHONE, lc_telephone_values,
923 sizeof(lc_telephone_values)/sizeof(lc_telephone_values[0]) );
924 locale_update_registry( hkey, lc_paperW, lcid_LC_PAPER, lc_paper_values,
925 sizeof(lc_paper_values)/sizeof(lc_paper_values[0]) );
926
927 if (locale_update_registry( hkey, lc_ctypeW, lcid_LC_CTYPE, NULL, 0 ))
928 {
929 static const WCHAR codepageW[] =
930 {'\\','R','e','g','i','s','t','r','y','\\','M','a','c','h','i','n','e','\\','S','y','s','t','e','m','\\',
931 'C','u','r','r','e','n','t','C','o','n','t','r','o','l','S','e','t','\\',
932 'C','o','n','t','r','o','l','\\','N','l','s','\\','C','o','d','e','p','a','g','e',0};
933
935 HANDLE nls_key;
936 DWORD len = 14;
937
938 RtlInitUnicodeString( &nameW, codepageW );
940 while (codepageW[len])
941 {
942 nameW.Length = len * sizeof(WCHAR);
943 if (NtCreateKey( &nls_key, KEY_ALL_ACCESS, &attr, 0, NULL, 0, NULL )) break;
944 NtClose( nls_key );
945 len++;
946 while (codepageW[len] && codepageW[len] != '\\') len++;
947 }
948 nameW.Length = len * sizeof(WCHAR);
949 if (!NtCreateKey( &nls_key, KEY_ALL_ACCESS, &attr, 0, NULL, 0, NULL ))
950 {
951 for (i = 0; i < sizeof(update_cp_values)/sizeof(update_cp_values[0]); i++)
952 {
953 count = GetLocaleInfoW( lcid, update_cp_values[i].value | LOCALE_NOUSEROVERRIDE,
954 bufferW, sizeof(bufferW)/sizeof(WCHAR) );
955 RtlInitUnicodeString( &nameW, update_cp_values[i].name );
956 NtSetValueKey( nls_key, &nameW, 0, REG_SZ, bufferW, count * sizeof(WCHAR) );
957 }
958 NtClose( nls_key );
959 }
960 }
961
962 NtClose( hkey );
963}
static BOOL locale_update_registry(HKEY hkey, const WCHAR *name, LCID lcid, const LCTYPE *values, UINT nb_values)
Definition: locale.c:799
#define REG_SZ
Definition: locale.c:45
static const WCHAR localeW[]
Definition: locale.c:43
#define InitializeObjectAttributes(p, n, a, r, s)
Definition: reg.c:106
NTSYSAPI NTSTATUS NTAPI NtSetValueKey(IN HANDLE KeyHandle, IN PUNICODE_STRING ValueName, IN ULONG TitleIndex OPTIONAL, IN ULONG Type, IN PVOID Data, IN ULONG DataSize)
Definition: ntapi.c:859
unsigned short USHORT
Definition: pedump.c:61
Definition: name.c:39
#define LOCALE_SCOUNTRY
Definition: winnls.h:32
#define LOCALE_SABBREVLANGNAME
Definition: winnls.h:29
#define LOCALE_SLIST
Definition: winnls.h:42

◆ locale_update_registry()

static BOOL locale_update_registry ( HKEY  hkey,
const WCHAR name,
LCID  lcid,
const LCTYPE values,
UINT  nb_values 
)
static

Definition at line 799 of file locale.c.

801{
802 static const WCHAR formatW[] = { '%','0','8','x',0 };
803 WCHAR bufferW[40];
805 DWORD count, i;
806
808 count = sizeof(bufferW);
810 {
812 LPCWSTR text = (LPCWSTR)info->Data;
813
814 if (strtoulW( text, NULL, 16 ) == lcid) return FALSE; /* already set correctly */
815 TRACE( "updating registry, locale %s changed %s -> %08x\n",
816 debugstr_w(name), debugstr_w(text), lcid );
817 }
818 else TRACE( "updating registry, locale %s changed none -> %08x\n", debugstr_w(name), lcid );
819 sprintfW( bufferW, formatW, lcid );
820 NtSetValueKey( hkey, &nameW, 0, REG_SZ, bufferW, (strlenW(bufferW) + 1) * sizeof(WCHAR) );
821
822 for (i = 0; i < nb_values; i++)
823 {
824 GetLocaleInfoW( lcid, values[i] | LOCALE_NOUSEROVERRIDE, bufferW,
825 sizeof(bufferW)/sizeof(WCHAR) );
826 SetLocaleInfoW( lcid, values[i], bufferW );
827 }
828 return TRUE;
829}
BOOL WINAPI SetLocaleInfoW(LCID lcid, LCTYPE lctype, LPCWSTR data)
Definition: locale.c:1921
const WCHAR * text
Definition: package.c:1794
GLboolean GLenum GLenum GLvoid * values
Definition: glext.h:5666
if(dx< 0)
Definition: linetemp.h:194
#define strtoulW(s1, s2, b)
Definition: unicode.h:47

Referenced by LOCALE_InitRegistry().

◆ lstrcmpA()

int WINAPI lstrcmpA ( LPCSTR  str1,
LPCSTR  str2 
)

Definition at line 4195 of file locale.c.

4196{
4197 int ret;
4198
4199 if ((str1 == NULL) && (str2 == NULL)) return 0;
4200 if (str1 == NULL) return -1;
4201 if (str2 == NULL) return 1;
4202
4203 ret = CompareStringA(GetThreadLocale(), LOCALE_USE_CP_ACP, str1, -1, str2, -1);
4204 if (ret) ret -= 2;
4205
4206 return ret;
4207}
LCID WINAPI GetThreadLocale(void)
Definition: locale.c:2801
INT WINAPI CompareStringA(LCID lcid, DWORD flags, LPCSTR str1, INT len1, LPCSTR str2, INT len2)
Definition: locale.c:4083

Referenced by check_font(), check_list(), check_reg_str(), check_wellknown_name(), compare_string1(), CryptFindOIDInfo(), dde_msg_client_wndproc(), dde_server_wndproc(), dde_server_wndprocA(), dde_server_wndprocW(), DoStepCheck(), eto_emf_enum_proc(), expect_shim_imp(), file_matches(), find_prop_in_property(), FindTest(), hook_WaitForInputIdle(), is_prefix_wa(), JustDoIt(), LPropCompareProp(), main(), match_emf_record(), mdi_child_wnd_proc_1(), mdi_child_wnd_proc_2(), mdr_GetValue(), notify_datetime_handler(), notify_generic_text_handler(), notify_tooltip_handler(), option_equal(), parse_clr_metadata(), PathMatchSpecA(), PRINTDLG_ChangePrinterA(), PropertyStorage_PropNameCompare(), proppage_callback_a(), PropVariantCompareEx(), PropVariantToBoolean(), server_ddeml_callback(), server_end_to_end_callback(), START_TEST(), str_eq_wa(), strcmp_wa(), strcmp_ww(), StrCmpCA(), strcomparefunc(), test_32bit_win(), test__get_narrow_winmain_command_line(), test_appsearch_complocator(), test_appsearch_drlocator(), test_appsearch_inilocator(), test_appsearch_reglocator(), test_authentication(), test_binary(), test_binary_import(), test_BstrCopy(), test_ccpsearch(), test_collation(), test_CompareStringA(), test_complocator(), test_ConvertINetUnicodeToMultiByte(), test_CreateAssemblyNameObject(), test_CreateFontIndirect(), test_CredMarshalCredentialA(), test_CryptCATAdminAddRemoveCatalog(), test_db(), test_dbmerge(), test_dbtopackage(), test_DdeCreateDataHandle(), test_DdeCreateStringHandleW(), test_ddeml_client(), test_DoEnvironmentSubst(), test_EM_GETHANDLE(), test_EM_SETTEXTEX(), test_emptypackage(), test_EnumDateFormatsA(), test_enumerate(), test_enumerate_name(), test_EnumTimeFormatsA(), test_Extract(), test_fieldzero(), test_FoldStringA(), test_font_substitution(), test_forcecodepage(), test_formatrecord(), test_formatrecord_package(), test_formatrecord_tables(), test_fullname(), test_fullname2_helper(), test_GetAcceptLanguagesA(), test_GetDisplayName(), test_GetFullPathNameA(), test_GetLocaleInfoA(), test_GetPrivateProfileString(), test_GetPtrAW(), test_GetRfc1766FromLcid(), test_GetRfc1766Info(), test_GetSetConsoleInputExeName(), test_GetSetEnvironmentVariableA(), test_getstring(), test_GetSystemDirectoryA(), test_GetTextFace(), test_GetUrlCacheConfigInfo(), test_GetWindowsDirectoryA(), test_IMultiLanguage2_ConvertStringFromUnicode(), test_inffilelistA(), test_initialization(), test_Installer_InstallProduct(), test_installprops(), test_InternetCanonicalizeUrlA(), test_interthread_messages(), test_kerberos(), test_lastusedsource(), test_LcidToRfc1766(), test_lcmapstring_unicode(), test_LCMapStringA(), test_LookupAccountName(), test_LookupAccountSid(), test_LZOpenFileA(), test_LZOpenFileA_existing_compressed(), test_LZOpenFileA_nonexisting_compressed(), test_LZOpenFileW(), test_LZOpenFileW_existing_compressed(), test_LZOpenFileW_nonexisting_compressed(), test_MsiDatabaseCommit(), test_MsiEnumClients(), test_MsiEnumPatches(), test_MsiEnumPatchesEx(), test_MsiEnumPatchesEx_machine(), test_MsiEnumPatchesEx_usermanaged(), test_MsiEnumPatchesEx_userunmanaged(), test_msiexport(), test_MsiGetComponentPath(), test_MsiGetComponentPathEx(), test_MsiGetFileVersion(), test_MsiGetPatchInfo(), test_MsiGetPatchInfoEx(), test_MsiGetProductCode(), test_MsiGetProductInfoEx(), test_MsiGetProductProperty(), test_MsiGetSourcePath(), test_MsiGetUserInfo(), test_MsiInstallProduct(), test_MsiOpenProduct(), test_MsiProvideQualifiedComponentEx(), test_MsiRecordGetString(), test_MsiSetProperty(), test_MsiSourceListAddSourceEx(), test_MsiSourceListEnumMediaDisks(), test_MsiSourceListEnumSources(), test_MsiSourceListGetInfo(), test_multibyte_to_unicode_translations(), test_negative_dest_length(), test_negative_source_length(), test_norecompute(), test_notify_generic_text_helper(), test_notify_proc(), test_oemcharset(), test_Option_PerConnectionOptionA(), test_ParseURLFromOutsideSourceA(), test_ParseURLFromOutsideSourceW(), test_PathAddBackslash(), test_PathAppendA(), test_PathBuildRootA(), test_PathCanonicalizeA(), test_PathCombineA(), test_PathCommonPrefixA(), test_PathFindExtensionA(), test_PathNameA(), test_PdhLookupPerfNameByIndexA(), test_process_components(), test_PropCopyMore(), test_property_table(), test_pSetupGetField(), test_publish_sourcelist(), test_queryreader(), test_readwrite(), test_reg_query_value(), test_RegisterClipboardFormatA(), test_RtlGetFullPathName_U(), test_ScriptGetFontProperties(), test_SetDefaultPrinter(), test_settargetpath(), test_SetupGetFileCompressionInfo(), test_SetupGetFileCompressionInfoEx(), test_SetupGetSourceFileLocation(), test_SetupGetSourceInfo(), test_SHCreateWorkerWindowA(), test_SHFormatDateTimeA(), test_SHGetFolderPathAndSubDirA(), test_SHGetObjectCompatFlags(), test_shortlongsource(), test_sorting(), test_sourcedir(), test_storages_table(), test_streamtable(), test_summary_binary(), test_SysAllocStringByteLen(), test_try_transform(), test_UDS_SETBUDDYINT(), test_updown_base(), test_UrlApplyScheme(), test_urlcacheW(), test_XcvDataPort_ConfigureLPTPortCommandOK(), testAuth(), testGetValidUsages(), testPropsHelper(), testScreenBuffer(), verify_shima_imp(), WorkerThread(), and wsprintfATest().

◆ lstrcmpiA()

int WINAPI lstrcmpiA ( LPCSTR  str1,
LPCSTR  str2 
)

Definition at line 4224 of file locale.c.

4225{
4226 int ret;
4227
4228 if ((str1 == NULL) && (str2 == NULL)) return 0;
4229 if (str1 == NULL) return -1;
4230 if (str2 == NULL) return 1;
4231
4233 if (ret) ret -= 2;
4234
4235 return ret;
4236}

Referenced by __ConvertName(), __GetLCIDFromName(), cbt_global_hook_proc(), check_info_filename(), check_lnk_(), check_reg_str(), cmp_mru_strA(), create_sub_body(), dns_strcmpX(), DoTestEntry(), enum_all_fonts_proc(), EnumLocalesProcA(), fdi_decomp(), file_in_list(), find_default_prop(), find_prop(), FindImportDescriptor(), get_window_attributes(), hook_WaitForInputIdle(), IntGetImageBase(), CCopyMoveToMenu::InvokeCommand(), is_local_machineA(), is_our_logged_class(), is_stub_dll(), MACRO_CloseSecondarys(), MACRO_CloseWindow(), MACRO_FocusWindow(), MACRO_HelpOnTop(), MACRO_LookupButton(), main(), MapVerbToCmdId(), MapVerbToDfmCmd(), matchSpecialFolderPathToEnv(), MimeBody_DeleteProp(), MimeBody_GetProp(), MimeBody_IsContentType(), MimeBody_SetProp(), MimeInternat_FindCharset(), okChildString_(), path_hook_proc(), PathIsExeA(), PropertyStorage_PropNameCompare(), PropVariantCompareEx(), PropVariantToBoolean(), read_prop(), RedirectIat(), scan_subkeys(), SHADD_compare_mru(), SHELL_IsVerb(), SHELL_MapContextMenuVerbToCmdId(), SHRegGetBoolUSValueA(), START_TEST(), StrCmpICA(), stricmp_wa(), Test2(), test_appsearch_drlocator(), TEST_AssocQueryStringA(), test_bitmap_font_glyph_index(), test_CompareStringA(), test_CurrentDirectoryA(), test_enum_sections(), test_enumdisplaydevices_monitor(), test_filenames(), test_FindFirstFileA(), test_FunnyChars(), test_get_displayname(), test_get_file_info(), test_get_servicekeyname(), test_get_set(), test_GetFinalPathNameByHandleA(), test_GetIconLocation(), test_GetLongPathNameA(), test_GetProcessImageFileNameA(), test_GetStandardColorSpaceProfileA(), test_GetStandardColorSpaceProfileW(), test_GetTempFileNameA(), test_GetTempPathA(), test_handles(), test_hwnd_message(), test_IME(), test_InitPathA(), test_LoadLibraryEx_search_flags(), test_LongtoShortA(), test_LookupAccountName(), test_module(), test_nonexistent_font(), test_open_svc(), test_OpenFile(), test_PathCreateFromUrl(), test_PathNameA(), test_PrintDlgA(), test_process_components(), test_QueryFullProcessImageNameA(), test_readwrite(), test_registerDefaultOIDFunction(), test_setdir(), test_SetSearchPathMode(), test_settargetpath(), test_SetupGetTargetPath(), test_sh_new_link_info(), test_SHGetFolderPathA(), test_urlcacheA(), test_UrlCreateFromPath(), test_ValidPathA(), testing_status_routine(), testSystemDir(), testWinDir(), translateinfstringex_test(), TTIsEmbeddingEnabledForFacename(), VerInstallFileA(), WDML_ClientProc(), WDML_ServerNameProc(), win_event_global_hook_proc(), WINHELP_CreateHelpWindow(), WINHELP_DeleteWindow(), and WINHELP_GetWindowInfo().

◆ lstrcmpiW()

int WINAPI lstrcmpiW ( LPCWSTR  str1,
LPCWSTR  str2 
)

Definition at line 4262 of file locale.c.

4263{
4264 int ret;
4265
4266 if ((str1 == NULL) && (str2 == NULL)) return 0;
4267 if (str1 == NULL) return -1;
4268 if (str2 == NULL) return 1;
4269
4270 ret = CompareStringW(GetThreadLocale(), NORM_IGNORECASE, str1, -1, str2, -1);
4271 if (ret) ret -= 2;
4272
4273 return ret;
4274}
INT WINAPI CompareStringW(LCID lcid, DWORD flags, LPCWSTR str1, INT len1, LPCWSTR str2, INT len2)
Definition: locale.c:4014

Referenced by ActivateContentTopic(), add_favs_to_menu(), add_font(), AviMux_FindPin(), BaseRendererImpl_FindPin(), CFn_WMCommand(), CFSExtractIcon_CreateInstance(), CCabFolder::CompareID(), CompareIDs(), compareUrlArray(), copy_files(), count_moniker_matches(), CRYPT_FileNameOpenStoreW(), CRYPT_FindStringInMultiString(), CRYPT_SysRegOpenStoreW(), CryptFindLocalizedName(), DdeCmpStringHandles(), DEVENUM_IMediaCatMoniker_IsEqual(), dns_name_matches(), dns_strcmpX(), do_process_key(), ATL::CRegObject::do_process_key(), do_process_root_key(), ATL::CRegObject::do_process_root_key(), DoEntry(), DoInitAutoCompleteWithCWD(), domain_name_matches(), DoSync(), DoTestComputerName(), DoTestEntry(), EditTypeDlg_OnCommand(), EditTypeDlg_OnDrawItem(), EnableCommandIfVerbExistsProc(), CDirectoryItem::EqualPath(), extract_cab_cb(), ExtractFilesCallback(), FILEDLG95_FILETYPE_SearchExt(), FILEDLG95_OnOpen(), FileMonikerImpl_CommonPrefixWith(), FileMonikerImpl_IsEqual(), FileMonikerImpl_RelativePathTo(), CMenuSFToolbar::FillToolbar(), find_control(), find_installed_ports(), find_portinfo2(), find_top_window(), FindExeCplClass(), CEnumIDList::FindNamedItem(), fnIMultiLanguage3_GetCharsetInfo(), format_filelist_filename(), GdipGetSupportedFileExtensions(), get_operation(), GetBinaryTypeW(), GetFileTypeIconsEx(), CShellDispatch::GetSystemInformation(), HTMLFormElement_put_encoding(), HTMLFormElement_put_method(), IAssemblyCacheImpl_InstallAssembly(), Imm32IsRunningInMsoobe(), Imm32WriteImeLayout(), ImmInstallIMEW(), CACLCustomMRU::Initialize(), CVfdShExt::InvokeCommand(), IsPidlPrograms(), IsSwitch(), ITypeComp_fnBind(), ITypeInfo_fnGetIDsOfNames(), JapaneseEra_IsFirstYearGannen(), ldr_enum_callback(), ldr_notify_callback1(), ldr_notify_callback_imports(), load_mapi_provider(), LocalmonAddPortEx(), ModifyShellContextMenu(), MSSTYLES_FindClass(), MSSTYLES_GetActiveThemeIni(), MSSTYLES_GetFont(), MSSTYLES_LoadBitmap(), MSSTYLES_LookupEnum(), MSSTYLES_LookupPartState(), MSSTYLES_LookupProperty(), MSSTYLES_OpenThemeFile(), MSSTYLES_ParseThemeIni(), MSTASK_ITaskScheduler_SetTargetComputer(), ok_child_stringWA(), CDesktopBrowser::OnSettingChange(), CTrayWindow::OnSettingChanged(), parse_display_name(), parse_procarch(), parse_pubkey(), ParseDisplayName(), PathIsDosDevice(), PickIconProc(), PrintOSVersion(), PropertyStorage_PropNameCompare(), PropStgNameToFmtId(), PropVariantCompareEx(), PropVariantToBoolean(), pSetupStringTableAddString(), pSetupStringTableAddStringEx(), pSetupStringTableLookUpString(), pSetupStringTableLookUpStringEx(), CDummyPropertyBag::Read(), realize_font(), reg_add(), reg_copy(), reg_delete(), reg_export(), reg_import(), reg_query(), registry_set_filelist(), rfc822_name_matches(), SampleGrabber_IBaseFilter_FindPin(), ScanAdvancedSettings(), SECUR32_findPackageW(), ServiceStarter(), set_ldids(), SHADD_compare_mru(), SHAddToRecentDocs(), SHCreatePropertyBagOnProfileSection(), SHELL32_GetFSItemAttributes(), SHELL_IsVerb(), shellex_run_context_menu_default(), SHGetSpecialFolderID(), SHRegGetBoolUSValueW(), SHSettingsChanged(), START_TEST(), StrCmpICW(), SvcRegisterStopCallback(), TEST_AssocQueryStringW(), test_createfont(), test_detailed_info(), TEST_DoTestEntryStruct(), test_EnumCodePages(), test_file_all_name_information(), test_file_info(), test_file_link_information(), test_file_name_information(), test_file_rename_information(), test_FolderCollection(), test_FolderShortcut(), test_fontfamily(), test_format_object(), test_GetAbsolutePathName(), test_GetDisplayName(), test_GetFile(), test_GetFinalPathNameByHandleW(), Test_GetFontResourceInfoW_case1(), Test_GetFontResourceInfoW_case2(), Test_GetFontResourceInfoW_case4(), test_getgenerics(), test_GetSpecialFolder(), test_getstring_bad(), test_GetTempPathW(), test_HashLinks(), test_info_in_assembly(), test_knownFolders(), test_LocalizedNames(), test_namespace(), test_ParseDisplayNamePBC(), test_PathCreateFromUrl(), test_PathSearchAndQualify(), test_ProgIDFromCLSID(), test_QueryFullProcessImageNameW(), test_realization(), test_RtlStringFromGUID(), test_SetApplicationName_GetApplicationName(), test_SetTargetComputer(), test_SHGetFolderPathEx(), test_SHGetPathFromIDList(), test_SHGetSetFolderCustomSettings(), TEST_Start(), test_streamenum(), test_StringFromGUID2(), test_StringTableStringFromId(), test_type_info(), test_typelib(), test_UrlCreateFromPath(), test_Win32_ComputerSystem(), TestCommandLine(), ThemeDlgPostWindowProc(), TLB_get_typeinfo_by_name(), TLB_get_vardesc_by_name(), TREEVIEW_SortOnName(), UPDOWN_SetBuddy(), UPDOWN_SetBuddyInt(), URLMoniker_IsEqual(), UXTHEME_FormatParseMessage(), Validate_EmptyShimData_Win10(), validate_envW(), validate_operation(), Validate_ShimData_Win10(), ViewTree_FindIcon(), ViewTree_LoadTree(), WDML_BroadcastEnumProc(), WDML_ClientProc(), WDML_ServerNameProc(), WICMapShortNameToGuid(), CDummyPropertyBag::Write(), write_registry_values(), and wWinMain().

◆ lstrcmpW()

int WINAPI lstrcmpW ( LPCWSTR  str1,
LPCWSTR  str2 
)

Definition at line 4243 of file locale.c.

4244{
4245 int ret;
4246
4247 if ((str1 == NULL) && (str2 == NULL)) return 0;
4248 if (str1 == NULL) return -1;
4249 if (str2 == NULL) return 1;
4250
4251 ret = CompareStringW(GetThreadLocale(), 0, str1, -1, str2, -1);
4252 if (ret) ret -= 2;
4253
4254 return ret;
4255}

Referenced by _check_default_props(), _check_set_props(), _findProviderIndexW(), _test_GetCurMoniker(), _test_language_string(), ActiveScript_AddNamedItem(), ActiveScriptSite_GetItemInfo(), add_favs_to_menu(), ADVAPI_IsLocalComputer(), AVIBuildFilterW(), cert_mgr_sort_by_text(), check_display_name_(), check_dropdown_(), check_known_folder(), ClassTest(), compare_addrinfow(), compare_export_(), compare_font(), compare_items(), compare_metadata(), compareAltNameEntry(), CRegistryFolder::CompareIDs(), ConfigFileHandler_startElement(), cpinfo_cmp(), CredDialogFillUsernameCombo(), CredUIConfirmCredentialsW(), CredUIPromptForCredentialsW(), CRYPT_RegReadSerializedFromReg(), CryptFindOIDInfo(), dde_server_wndprocA(), dde_server_wndprocW(), DELNODE_recurse_dirtree(), DEVENUM_IPropertyBag_Read(), dispex_GetDispID(), DoEntry(), DoGetProductType(), DoTestComputerName(), DoTestEntry(), DSPROPERTY_WaveDeviceMappingW(), EditTypeDlg_WriteClass(), enum_find_filter(), enum_gac_assemblies(), enum_stream_names(), enumeration_callback(), EnumJoysticks(), DownloadInfo::Equal(), export_password_dlg_proc(), FEqualNames(), find_existing_credential(), find_property_index(), find_window(), find_window_callback(), FindDll(), general_on_notify(), get_dest_dir(), get_encoder_clsid(), GetFileTypeIconsEx(), getstring_test(), GetTypeFromName(), HlinkBrowseContext_GetObject(), hls_site_Moniker_ComposeWith(), HttpNegotiate_BeginningTransaction(), IAssemblyNameImpl_IsEqual(), IDxDiagContainerImpl_GetChildContainerInternal(), IDxDiagContainerImpl_GetProp(), iframe_onreadystatechange(), Imm32UnitTest(), InitPropertyBag_IPropertyBag_Read(), InPlaceFrame_SetActiveObject(), InPlaceUIWindow_SetActiveObject(), inst_func2(), InstallColorProfileW(), InternetProtocolInfo_CombineUrl(), InternetProtocolInfo_ParseUrl(), is_expected_variant(), is_ime_window_proc(), is_in_strarray(), is_netmeeting_running(), JustDoIt(), ldap_parse_page_controlW(), LISTBOX_Directory(), LISTVIEW_EndEditLabelT(), LISTVIEW_FindItemW(), LPropCompareProp(), LsapIsLocalComputer(), MimeProtocol_Start(), mixer_test_deviceW(), MMDevEnum_GetDevice(), MNLS_lstrcmpW(), MonikerProp_PutProperty(), MSACM_FillFormatTagsCB(), MsgConversionProcW(), notify_generic_text_handler(), notify_if_changed(), ok_child_stringWA(), on_default_action(), on_fontlist_modified(), on_mime_message_available(), on_sizelist_modified(), pagesetup_set_devnames(), parse_file_header(), parse_hhindex(), ParseDisplayName_ParseDisplayName(), PathMatchSpecW(), PB_Read(), PerformRegAction(), pointer_tests(), PRINTDLG_ChangePrinterW(), PRINTDLG_CreateDevNamesW(), process_arguments(), PropertyNotifySink_OnChanged(), proppage_callback_w(), PropVariantCompareEx(), PropVariantToBoolean(), Protocol_Continue(), Protocol_Start(), protocol_start(), ProtocolSink_ReportProgress(), pSetupStringTableAddString(), pSetupStringTableAddStringEx(), pSetupStringTableLookUpString(), pSetupStringTableLookUpStringEx(), r_getMonikerRef(), r_getStringRef(), r_verify_pidl(), REBAR_MoveChildWindows(), REBAR_strdifW(), REGPROC_open_export_file(), res_sec_url_cmp(), resource_strcmp(), RtlAtomTestThread(), run_get_comp_name_tests(), run_test(), run_usergetinfo_tests(), run_wkstausergetinfo_tests(), scriptinfo_cmp(), search_dll_path(), server_end_to_end_callback(), set_up_attribute_test(), SetupQuerySpaceRequiredOnDriveW(), SHGetFileInfoW(), should_enumerate_device(), simple_callbackW(), site_GetItemInfo(), SmartTeeFilter_FindPin(), START_TEST(), STATUSBAR_SetTextT(), statusclb_OnDataAvailable(), statusclb_OnProgress(), Storage_CreateStream(), Storage_OpenStream(), strcmp_aw(), strcmp_wa(), StrCmpCW(), tear_down_attribute_test(), test_32bit_win(), test_about_protocol(), test_aclist_expand(), test_assembly_name_props_line(), test_aw_conversion_dlgproc(), test_aw_conversion_dlgprocA(), test_aw_conversion_dlgprocW(), test_aw_conversion_wndproc(), test_bad_header(), test_basics(), test_BindToObject(), test_BindToStorage(), test_bstr_cache(), test_BuildPath(), test_button_class(), test_catalog_properties(), test_CertRDNValueToStrW(), test_CharToOem_OemToChar(), test_chunked_read(), Test_ClassAtoms(), test_cloneNode(), test_codec(), test_CoInternetCombineIUri_Pluggable(), test_CoInternetCombineUrlEx_Pluggable(), test_CoInternetParseIUri_InvalidArgs(), test_CoInternetParseIUri_Pluggable(), test_CoInternetParseUrl(), test_collation(), test_commandline2argv(), test_convert(), test_cookies(), test_copy(), test_CopyStgMedium(), test_costs(), test_create(), test_create_attribute(), test_create_catalog_file(), test_createNode(), test_CreateTextFile(), test_CreateTypeLib(), test_CredUnmarshalCredentialA(), test_cryptunprotectdata(), test_cue_banner(), test_custom_source(), test_customize(), test_customize_onfolderchange(), test_datalink(), test_DavGetHTTPFromUNCPath(), test_DavGetUNCFromHTTPPath(), test_DdeCreateStringHandleW(), test_decodeAltName(), test_decodeAuthorityKeyId2(), test_decodeCatMemberInfo(), test_decodeCatNameValue(), test_decodeCRLDistPoints(), test_decodePolicyQualifierUserNotice(), test_decoder_info(), test_decodeSPCLink(), test_decodeSPCPEImage(), test_decodeSpOpusInfo(), test_default_client_accessible_object(), test_default_format(), test_default_handler(), test_default_properties(), test_desktop_displaynameof(), test_directory_sort(), test_directshow_filter(), test_dmo(), test_doc_load_from_path(), test_DoEnvironmentSubst(), test_domdoc(), test_domnode(), test_DsClientMakeSpnForTargetServer(), test_DsMakeSpn(), test_dsound(), test_EM_GETHANDLE(), test_EM_GETLINE(), test_EM_SETTEXTEX(), test_EnumTimeFormatsW(), test_exec_fontname(), test_FileCollection(), test_filename_opendlg_(), test_filename_savedlg_(), test_filesourcefilter(), test_find_com_redirection(), test_find_surrogate(), test_find_window_class(), test_FindName(), test_findOIDInfo(), test_fm2_enummatchingfilters(), test_FolderCollection(), test_font_events_disp(), test_format_object(), test_format_record(), test_FormattingXML(), test_get_attributes(), test_get_childNodes(), test_get_doctype(), test_get_firstChild(), test_get_namespaces(), test_get_nodeTypeString(), test_get_prefix(), test_get_tagName(), test_getAttribute(), test_GetBaseName(), test_GetCachePath(), test_GetCharsetInfo_other(), test_GetCodePageInfo(), test_GetDisplayName(), test_GetDrive(), test_GetDriveName(), test_GetDynamicTimeZoneInformation(), test_GetExtensionName(), test_GetFileName(), test_GetFullPathNameW(), test_GetLocaleInfoEx(), test_GetLocaleInfoW(), test_GetLocalName(), test_GetName(), test_GetParentFolderName(), test_GetRemoteName(), test_GetRfc1766Info(), test_getruntime(), test_GetSetEnvironmentVariableW(), test_getstring(), test_GetSystemDirectoryW(), test_GetText(), test_GetTextFace(), test_GetTimeZoneInformationForYear(), test_getuserobjectinformation(), test_GetWindowsDirectoryW(), test_Global(), test_globalness(), test_HlinkClone(), test_HlinkCreateExtensionServices(), test_HlinkGetSetMonikerReference(), test_HlinkGetSetStringReference(), test_HlinkParseDisplayName(), test_HttpOptions(), test_IActiveScriptError(), test_ICInfo(), test_inffilelist(), test_InitPropVariantFromGUIDAsString(), test_insertBefore(), test_InsertObject(), test_Installer_Products(), test_Installer_RegistryValue(), test_InternetGetSecurityUrl(), test_ITEMIDLIST_format(), test_items(), test_ITextDocument_Open(), test_ITextFont(), test_IUriBuilder_GetFragment(), test_IUriBuilder_GetHost(), test_IUriBuilder_GetPassword(), test_IUriBuilder_GetPath(), test_IUriBuilder_GetQuery(), test_IUriBuilder_GetSchemeName(), test_IUriBuilder_GetUserName(), test_IUriBuilder_HasBeenModified(), test_IWbemPath_GetClassName(), test_IWbemPath_GetNamespaceAt(), test_IWbemPath_GetServer(), test_IWbemPath_GetText(), test_IWbemPath_RemoveNamespaceAt(), test_IWbemPath_SetClassName(), test_IWbemPath_SetNamespaceAt(), test_IWbemPath_SetServer(), test_IWbemPath_SetText(), test_knownFolders(), test_lcmapstring_unicode(), test_LCMapStringEx(), test_legacy_filter(), test_legacy_filter_registration(), test_load(), test_LocaleNameToLCID(), test_marshal_array(), test_marshal_SNB(), test_media_streams(), test_mediadet(), test_menu_add_string(), test_message_allocate_buffer_wide(), test_message_from_64bit_number(), test_message_from_string_wide(), test_message_ignore_inserts_wide(), test_message_invalid_flags_wide(), test_MessageBoxFontTest(), test_MessageSetProp(), test_metadata_APE(), test_metadata_cHRM(), test_metadata_gAMA(), test_metadata_GCE(), test_metadata_gif(), test_metadata_GIF_comment(), test_metadata_hIST(), test_metadata_IMD(), test_metadata_LSD(), test_midiout(), test_MkParseDisplayNameEx(), test_moniker(), test_mouse_keyboard(), test_MsiGetProductProperty(), test_multibyte_to_unicode_translations(), test_mxattr_addAttribute(), test_mxattr_clear(), test_mxnamespacemanager(), test_mxnamespacemanager_override(), test_mxwriter_cdata(), test_mxwriter_characters(), test_mxwriter_comment(), test_mxwriter_default_properties(), test_mxwriter_dtd(), test_mxwriter_encoding(), test_mxwriter_ignorablespaces(), test_mxwriter_indent(), test_mxwriter_pi(), test_mxwriter_properties(), test_mxwriter_startenddocument(), test_mxwriter_startendelement(), test_mxwriter_startendelement_batch(), test_mxwriter_startendelement_batch2(), test_mxwriter_stream(), test_namedmap_newenum(), test_namespace(), test_namespaces_as_attributes(), test_namespaces_basic(), test_namespaces_change(), test_NameToStrConversionW(), test_negative_source_length(), test_NetFwAuthorizedApplication(), test_newline_normalization(), test_nodeTypedValue(), test_nodeValue(), test_note(), test_notify_proc(), test_NtAtom(), test_NtIntAtom(), test_null(), test_OleRegGetUserType(), test_OleUIAddVerbMenu(), test_one_cmdline(), test_Option_PerConnectionOption(), test_overwrite(), test_para_numbering(), test_ParseDisplayName(), test_passport_auth(), test_PathUnExpandEnvStrings(), test_PathUnquoteSpaces(), test_PathYetAnotherMakeUniqueName(), test_prefix_filtering(), test_preserve_charref(), test_printf_natural_string(), test_profile_string(), test_propertybag_getpropertyinfo(), test_propertytovariant(), test_props(), test_PropVariantChangeType_LPWSTR(), test_PropVariantToString(), test_PropVariantToStringAlloc(), test_PropVariantToStringWithDefault(), test_proxy_direct(), test_pSetupGetField(), test_put_data(), test_put_nodeTypedValue(), test_QueryAssemblyInfo(), test_queryconfig2(), test_QueryPathOfRegTypeLib(), test_queryreader(), test_Read(), test_read_attribute(), test_read_charref(), test_read_element(), test_read_pi(), test_read_public_dtd(), test_read_system_dtd(), test_read_xmldeclaration(), test_ReadAll(), test_recinfo(), test_reference(), test_reg_query_value(), test_registry(), test_registry_property_w(), test_RegQueryValueExPerformanceData(), test_root_children(), test_RtlGetFullPathName_U(), test_RtlInitUnicodeString(), test_RtlQueryPackageIdentity(), test_save(), test_saxreader_properties(), test_Sdb(), test_SdbTagToString(), test_SearchPathW(), test_selection(), test_Session(), test_SetAccountInformation_GetAccountInformation(), test_setAttributeNode(), test_SetComment_GetComment(), test_SetInitialHlink(), test_SetParameters_GetParameters(), test_SetupPromptForDiskW(), test_SHCreateShellItem(), test_SHCreateShellItemArray(), test_SHFormatDateTimeW(), test_SHGetIniString(), test_SHGetNameFromIDList(), test_SHGetPathFromIDList(), test_SQLGetPrivateProfileStringW(), test_SspiEncodeStringsAsAuthIdentity(), test_SspiPrepareForCredWrite(), test_StdHlink(), test_SysAllocString(), test_SysAllocStringByteLen(), test_SysAllocStringLen(), test_SysReAllocString(), test_SysReAllocStringLen(), test_targetpath(), test_textfont_global_defaults(), test_ToUnicode(), test_TxGetText(), test_typelibmarshal(), test_url_canonicalize(), test_url_combine(), test_url_part(), test_urlcacheW(), test_UrlEscapeW(), test_UrlUnescape(), test_VarDateChangeTypeEx(), test_vfw(), test_vsnwprintf_s(), test_wavein(), test_waveout(), test_wcscpy_s(), test_WICMapGuidToShortName(), test_WICMapSchemaToName(), test_Win32_Service(), test_WinHttpSendRequest(), test_wm_notify_comboboxex(), test_wm_notify_datetime(), test_wm_notify_tooltip(), test_wndclass_section(), test_WriteLine(), test_WTSEnumerateProcessesW(), test_XDR_datatypes(), test_xmldoc(), test_xmlelem(), test_xmlelem_collection(), test_XMLHTTP(), test_xmlns_attribute(), test_xmlTypes(), test_XPath(), test_xsltext(), testAddCertificateLink(), testCreateSelfSignCert(), testExpand(), testQuery(), testScreenBuffer(), testSetHelper(), textcmpWT(), TREEVIEW_EndEditLabelNow(), TREEVIEW_InsertItemT(), update_font_list(), update_size_list(), validate_endptr(), Validate_ShimData_Win2k3(), Validate_ShimData_Win7(), variant_func2(), verify_shimw_imp(), Widget_complex_struct(), Widget_VarArg_Ref_Run(), Widget_VarArg_Run(), Widget_variant(), Widget_variant_array(), WinHttpCrackUrl_test(), WinHttpCreateUrl_test(), winproc_convW(), WNetOpenEnumW(), WorkerThread(), wsprintfWTest(), and XCOPY_DoCopy().

◆ MultiByteToWideChar()

INT WINAPI MultiByteToWideChar ( UINT  page,
DWORD  flags,
LPCSTR  src,
INT  srclen,
LPWSTR  dst,
INT  dstlen 
)

Definition at line 2466 of file locale.c.

2468{
2469 const union cptable *table;
2470 int ret;
2471
2472 if (!src || !srclen || (!dst && dstlen) || dstlen < 0)
2473 {
2475 return 0;
2476 }
2477
2478 if (srclen < 0) srclen = strlen(src) + 1;
2479
2480 switch(page)
2481 {
2482 case CP_SYMBOL:
2483 if (flags)
2484 {
2486 return 0;
2487 }
2489 break;
2490 case CP_UTF7:
2491 if (flags)
2492 {
2494 return 0;
2495 }
2497 break;
2498 case CP_UNIXCP:
2499 if (unix_cptable)
2500 {
2502 break;
2503 }
2504#ifdef __APPLE__
2505 flags |= MB_COMPOSITE; /* work around broken Mac OS X filesystem that enforces decomposed Unicode */
2506#endif
2507 /* fall through */
2508 case CP_UTF8:
2509 if (flags & ~MB_FLAGSMASK)
2510 {
2512 return 0;
2513 }
2515 break;
2516 default:
2517 if (!(table = get_codepage_table( page )))
2518 {
2520 return 0;
2521 }
2522 if (flags & ~MB_FLAGSMASK)
2523 {
2525 return 0;
2526 }
2528 break;
2529 }
2530
2531 if (ret < 0)
2532 {
2533 switch(ret)
2534 {
2535 case -1: SetLastError( ERROR_INSUFFICIENT_BUFFER ); break;
2536 case -2: SetLastError( ERROR_NO_UNICODE_TRANSLATION ); break;
2537 }
2538 ret = 0;
2539 }
2540 TRACE("cp %d %s -> %s, ret = %d\n",
2542 return ret;
2543}
#define CP_UNIXCP
Definition: compat.h:79
static __inline const char * debugstr_an(const char *s, int n)
Definition: compat.h:55
#define MB_FLAGSMASK
Definition: locale.c:60
static int utf7_mbstowcs(const char *src, int srclen, WCHAR *dst, int dstlen)
Definition: locale.c:2350
int wine_cpsymbol_mbstowcs(const char *src, int srclen, WCHAR *dst, int dstlen)
int wine_cp_mbstowcs(const union cptable *table, int flags, const char *src, int srclen, WCHAR *dst, int dstlen)
Definition: mbtowc.c:265
int wine_utf8_mbstowcs(int flags, const char *src, int srclen, WCHAR *dst, int dstlen)
Definition: utf8.c:304
#define CP_SYMBOL
Definition: winnls.h:236

◆ NLS_EnumLanguageGroupLocales()

static BOOL NLS_EnumLanguageGroupLocales ( ENUMLANGUAGEGROUPLOCALE_CALLBACKS lpProcs)
static

Definition at line 4673 of file locale.c.

4674{
4675 static const WCHAR szAlternateSortsKeyName[] = {
4676 'A','l','t','e','r','n','a','t','e',' ','S','o','r','t','s','\0'
4677 };
4678 WCHAR szNumber[10], szValue[4];
4679 HANDLE hKey;
4680 BOOL bContinue = TRUE, bAlternate = FALSE;
4681 LGRPID lgrpid;
4682 ULONG ulIndex = 1; /* Ignore default entry of 1st key */
4683
4684 if (!lpProcs || !lpProcs->lgrpid || lpProcs->lgrpid > LGRPID_ARMENIAN)
4685 {
4687 return FALSE;
4688 }
4689
4690 if (lpProcs->dwFlags)
4691 {
4693 return FALSE;
4694 }
4695
4697
4698 if (!hKey)
4699 WARN("NLS registry key not found. Please apply the default registry file 'wine.inf'\n");
4700
4701 while (bContinue)
4702 {
4703 if (NLS_RegEnumValue( hKey, ulIndex, szNumber, sizeof(szNumber),
4704 szValue, sizeof(szValue) ))
4705 {
4706 lgrpid = strtoulW( szValue, NULL, 16 );
4707
4708 TRACE("lcid %s, grpid %d (%smatched)\n", debugstr_w(szNumber),
4709 lgrpid, lgrpid == lpProcs->lgrpid ? "" : "not ");
4710
4711 if (lgrpid == lpProcs->lgrpid)
4712 {
4713 LCID lcid;
4714
4715 lcid = strtoulW( szNumber, NULL, 16 );
4716
4717 /* FIXME: native returns extra text for a few (17/150) locales, e.g:
4718 * '00000437 ;Georgian'
4719 * At present we only pass the LCID string.
4720 */
4721
4722 if (lpProcs->procW)
4723 bContinue = lpProcs->procW( lgrpid, lcid, szNumber, lpProcs->lParam );
4724 else
4725 {
4726 char szNumberA[sizeof(szNumber)/sizeof(WCHAR)];
4727
4728 WideCharToMultiByte(CP_ACP, 0, szNumber, -1, szNumberA, sizeof(szNumberA), 0, 0);
4729
4730 bContinue = lpProcs->procA( lgrpid, lcid, szNumberA, lpProcs->lParam );
4731 }
4732 }
4733
4734 ulIndex++;
4735 }
4736 else
4737 {
4738 /* Finished enumerating this key */
4739 if (!bAlternate)
4740 {
4741 /* Enumerate alternate sorts also */
4742 hKey = NLS_RegOpenKey( hKey, szAlternateSortsKeyName );
4743 bAlternate = TRUE;
4744 ulIndex = 0;
4745 }
4746 else
4747 bContinue = FALSE; /* Finished both keys */
4748 }
4749
4750 if (!bContinue)
4751 break;
4752 }
4753
4754 if (hKey)
4755 NtClose( hKey );
4756
4757 return TRUE;
4758}
static const WCHAR szLocaleKeyName[]
Definition: locale.c:70
static BOOL NLS_RegEnumValue(HANDLE hKey, UINT ulIndex, LPWSTR szValueName, ULONG valueNameSize, LPWSTR szValueData, ULONG valueDataSize)
Definition: locale.c:4378
LANGGROUPLOCALE_ENUMPROCW procW
Definition: locale.c:4666
LANGGROUPLOCALE_ENUMPROCA procA
Definition: locale.c:4665
uint32_t ULONG
Definition: typedefs.h:59
DWORD LGRPID
Definition: winnls.h:522
#define LGRPID_ARMENIAN
Definition: winnls.h:478

Referenced by EnumLanguageGroupLocalesA(), and EnumLanguageGroupLocalesW().

◆ NLS_EnumSystemLanguageGroups()

static BOOL NLS_EnumSystemLanguageGroups ( ENUMLANGUAGEGROUP_CALLBACKS lpProcs)
static

Definition at line 4477 of file locale.c.

4478{
4479 WCHAR szNumber[10], szValue[4];
4480 HANDLE hKey;
4481 BOOL bContinue = TRUE;
4482 ULONG ulIndex = 0;
4483
4484 if (!lpProcs)
4485 {
4487 return FALSE;
4488 }
4489
4490 switch (lpProcs->dwFlags)
4491 {
4492 case 0:
4493 /* Default to LGRPID_INSTALLED */
4494 lpProcs->dwFlags = LGRPID_INSTALLED;
4495 /* Fall through... */
4496 case LGRPID_INSTALLED:
4497 case LGRPID_SUPPORTED:
4498 break;
4499 default:
4501 return FALSE;
4502 }
4503
4505
4506 if (!hKey)
4507 FIXME("NLS registry key not found. Please apply the default registry file 'wine.inf'\n");
4508
4509 while (bContinue)
4510 {
4511 if (NLS_RegEnumValue( hKey, ulIndex, szNumber, sizeof(szNumber),
4512 szValue, sizeof(szValue) ))
4513 {
4514 BOOL bInstalled = szValue[0] == '1';
4515 LGRPID lgrpid = strtoulW( szNumber, NULL, 16 );
4516
4517 TRACE("grpid %s (%sinstalled)\n", debugstr_w(szNumber),
4518 bInstalled ? "" : "not ");
4519
4520 if (lpProcs->dwFlags == LGRPID_SUPPORTED || bInstalled)
4521 {
4522 WCHAR szGrpName[48];
4523
4524 if (!NLS_GetLanguageGroupName( lgrpid, szGrpName, sizeof(szGrpName) / sizeof(WCHAR) ))
4525 szGrpName[0] = '\0';
4526
4527 if (lpProcs->procW)
4528 bContinue = lpProcs->procW( lgrpid, szNumber, szGrpName, lpProcs->dwFlags,
4529 lpProcs->lParam );
4530 else
4531 {
4532 char szNumberA[sizeof(szNumber)/sizeof(WCHAR)];
4533 char szGrpNameA[48];
4534
4535 /* FIXME: MSDN doesn't say which code page the W->A translation uses,
4536 * or whether the language names are ever localised. Assume CP_ACP.
4537 */
4538
4539 WideCharToMultiByte(CP_ACP, 0, szNumber, -1, szNumberA, sizeof(szNumberA), 0, 0);
4540 WideCharToMultiByte(CP_ACP, 0, szGrpName, -1, szGrpNameA, sizeof(szGrpNameA), 0, 0);
4541
4542 bContinue = lpProcs->procA( lgrpid, szNumberA, szGrpNameA, lpProcs->dwFlags,
4543 lpProcs->lParam );
4544 }
4545 }
4546
4547 ulIndex++;
4548 }
4549 else
4550 bContinue = FALSE;
4551
4552 if (!bContinue)
4553 break;
4554 }
4555
4556 if (hKey)
4557 NtClose( hKey );
4558
4559 return TRUE;
4560}
static BOOL NLS_GetLanguageGroupName(LGRPID lgrpid, LPWSTR szName, ULONG nameSize)
Definition: locale.c:4427

Referenced by EnumSystemLanguageGroupsA(), and EnumSystemLanguageGroupsW().

◆ NLS_GetLanguageGroupName()

static BOOL NLS_GetLanguageGroupName ( LGRPID  lgrpid,
LPWSTR  szName,
ULONG  nameSize 
)
static

Definition at line 4427 of file locale.c.

4428{
4429 LANGID langId;
4430 LPCWSTR szResourceName = MAKEINTRESOURCEW(((lgrpid + 0x2000) >> 4) + 1);
4431 HRSRC hResource;
4432 BOOL bRet = FALSE;
4433
4434 /* FIXME: Is it correct to use the system default langid? */
4435 langId = GetSystemDefaultLangID();
4436
4437 if (SUBLANGID(langId) == SUBLANG_NEUTRAL) langId = get_default_sublang( langId );
4438
4439 hResource = FindResourceExW( kernel32_handle, (LPWSTR)RT_STRING, szResourceName, langId );
4440
4441 if (hResource)
4442 {
4443 HGLOBAL hResDir = LoadResource( kernel32_handle, hResource );
4444
4445 if (hResDir)
4446 {
4447 ULONG iResourceIndex = lgrpid & 0xf;
4448 LPCWSTR lpResEntry = LockResource( hResDir );
4449 ULONG i;
4450
4451 for (i = 0; i < iResourceIndex; i++)
4452 lpResEntry += *lpResEntry + 1;
4453
4454 if (*lpResEntry < nameSize)
4455 {
4456 memcpy( szName, lpResEntry + 1, *lpResEntry * sizeof(WCHAR) );
4457 szName[*lpResEntry] = '\0';
4458 bRet = TRUE;
4459 }
4460
4461 }
4462 FreeResource( hResource );
4463 }
4464 return bRet;
4465}
BOOL WINAPI FreeResource(HGLOBAL handle)
Definition: res.c:559
LANGID WINAPI GetSystemDefaultLangID(void)
Definition: locale.c:1194
static const WCHAR szName[]
Definition: powrprof.c:45
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582

Referenced by NLS_EnumSystemLanguageGroups().

◆ NLS_RegEnumValue()

static BOOL NLS_RegEnumValue ( HANDLE  hKey,
UINT  ulIndex,
LPWSTR  szValueName,
ULONG  valueNameSize,
LPWSTR  szValueData,
ULONG  valueDataSize 
)
static

Definition at line 4378 of file locale.c.

4382{
4383 BYTE buffer[80];
4385 DWORD dwLen;
4386
4388 buffer, sizeof(buffer), &dwLen ) != STATUS_SUCCESS ||
4389 info->NameLength > valueNameSize ||
4390 info->DataLength > valueDataSize)
4391 {
4392 return FALSE;
4393 }
4394
4395 TRACE("info->Name %s info->DataLength %d\n", debugstr_w(info->Name), info->DataLength);
4396
4397 memcpy( szValueName, info->Name, info->NameLength);
4398 szValueName[info->NameLength / sizeof(WCHAR)] = '\0';
4399 memcpy( szValueData, buffer + info->DataOffset, info->DataLength );
4400 szValueData[info->DataLength / sizeof(WCHAR)] = '\0';
4401
4402 TRACE("returning %s %s\n", debugstr_w(szValueName), debugstr_w(szValueData));
4403 return TRUE;
4404}
@ KeyValueFullInformation
Definition: nt_native.h:1181
NTSTATUS NTAPI NtEnumerateValueKey(IN HANDLE KeyHandle, IN ULONG Index, IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, OUT PVOID KeyValueInformation, IN ULONG Length, OUT PULONG ResultLength)
Definition: ntapi.c:542
unsigned char BYTE
Definition: xxhash.c:193

Referenced by NLS_EnumLanguageGroupLocales(), and NLS_EnumSystemLanguageGroups().

◆ NLS_RegGetDword()

static BOOL NLS_RegGetDword ( HANDLE  hKey,
LPCWSTR  szValueName,
DWORD lpVal 
)
static

Definition at line 4406 of file locale.c.

4407{
4408 BYTE buffer[128];
4410 DWORD dwSize = sizeof(buffer);
4411 UNICODE_STRING valueName;
4412
4413 RtlInitUnicodeString( &valueName, szValueName );
4414
4415 TRACE("%p, %s\n", hKey, debugstr_w(szValueName));
4418 info->DataLength == sizeof(DWORD))
4419 {
4420 memcpy(lpVal, info->Data, sizeof(DWORD));
4421 return TRUE;
4422 }
4423
4424 return FALSE;
4425}
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56

Referenced by IsValidLanguageGroup().

◆ NLS_RegOpenKey()

static HANDLE NLS_RegOpenKey ( HANDLE  hRootKey,
LPCWSTR  szKeyName 
)
static

Definition at line 4353 of file locale.c.

4355{
4356 UNICODE_STRING keyName;
4358 HANDLE hkey;
4359
4360 RtlInitUnicodeString( &keyName, szKeyName );
4361#ifdef __REACTOS__
4363#else
4364 InitializeObjectAttributes(&attr, &keyName, 0, hRootKey, NULL);
4365#endif
4366
4367 if (NtOpenKey( &hkey, KEY_READ, &attr ) != STATUS_SUCCESS)
4368 hkey = 0;
4369
4370 return hkey;
4371}
#define OBJ_CASE_INSENSITIVE
Definition: winternl.h:228
NTSYSAPI NTSTATUS NTAPI NtOpenKey(OUT PHANDLE KeyHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes)
Definition: ntapi.c:336
#define KEY_READ
Definition: nt_native.h:1023

Referenced by GetUserGeoID(), IsValidLanguageGroup(), NLS_EnumLanguageGroupLocales(), and NLS_EnumSystemLanguageGroups().

◆ NormalizeString()

INT WINAPI NormalizeString ( NORM_FORM  NormForm,
LPCWSTR  lpSrcString,
INT  cwSrcLength,
LPWSTR  lpDstString,
INT  cwDstLength 
)

Definition at line 5659 of file locale.c.

5661{
5662 FIXME("%x %p %d %p %d\n", NormForm, lpSrcString, cwSrcLength, lpDstString, cwDstLength);
5664 return 0;
5665}

◆ ResolveLocaleName()

INT WINAPI ResolveLocaleName ( LPCWSTR  name,
LPWSTR  localename,
INT  len 
)

Definition at line 6240 of file locale.c.

6241{
6242 FIXME("stub: %s, %p, %d\n", wine_dbgstr_w(name), localename, len);
6243
6245 return 0;
6246}
#define wine_dbgstr_w
Definition: kernel32.h:34

◆ SetCPGlobal()

UINT WINAPI SetCPGlobal ( UINT  acp)

Definition at line 2039 of file locale.c.

2040{
2041 UINT ret = GetACP();
2042 const union cptable *new_cptable = wine_cp_get_table( acp );
2043
2044 if (new_cptable) ansi_cptable = new_cptable;
2045 return ret;
2046}

◆ SetLocaleInfoA()

BOOL WINAPI SetLocaleInfoA ( LCID  lcid,
LCTYPE  lctype,
LPCSTR  data 
)

Definition at line 1889 of file locale.c.

1890{
1892 WCHAR *strW;
1893 DWORD len;
1894 BOOL ret;
1895
1896 if (!(lctype & LOCALE_USE_CP_ACP)) codepage = get_lcid_codepage( lcid );
1897
1898 if (!data)
1899 {
1901 return FALSE;
1902 }
1903 len = MultiByteToWideChar( codepage, 0, data, -1, NULL, 0 );
1904 if (!(strW = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) )))
1905 {
1907 return FALSE;
1908 }
1910 ret = SetLocaleInfoW( lcid, lctype, strW );
1911 HeapFree( GetProcessHeap(), 0, strW );
1912 return ret;
1913}
WCHAR strW[12]
Definition: clipboard.c:2029

Referenced by test_SetLocaleInfoA(), and test_VarCat().

◆ SetLocaleInfoW()

BOOL WINAPI SetLocaleInfoW ( LCID  lcid,
LCTYPE  lctype,
LPCWSTR  data 
)

Definition at line 1921 of file locale.c.

1922{
1923 struct registry_value *value;
1924 static const WCHAR intlW[] = {'i','n','t','l',0 };
1927 HANDLE hkey;
1928
1929 lctype &= 0xffff;
1931
1932 if (!data || !value)
1933 {
1935 return FALSE;
1936 }
1937
1939 {
1941 return FALSE;
1942 }
1943
1944 TRACE("setting %x (%s) to %s\n", lctype, debugstr_w(value->name), debugstr_w(data) );
1945
1946 /* FIXME: should check that data to set is sane */
1947
1948 /* FIXME: profile functions should map to registry */
1949 WriteProfileStringW( intlW, value->name, data );
1950
1951 if (!(hkey = create_registry_key())) return FALSE;
1953 status = NtSetValueKey( hkey, &valueW, 0, REG_SZ, (PVOID)data, (strlenW(data)+1)*sizeof(WCHAR) );
1954
1956 HeapFree( GetProcessHeap(), 0, value->cached_value );
1957 value->cached_value = NULL;
1959
1961 {
1962 /* Set I-value from S value */
1963 WCHAR *lpD, *lpM, *lpY;
1964 WCHAR szBuff[2];
1965
1966 lpD = strrchrW(data, 'd');
1967 lpM = strrchrW(data, 'M');
1968 lpY = strrchrW(data, 'y');
1969
1970 if (lpD <= lpM)
1971 {
1972 szBuff[0] = '1'; /* D-M-Y */
1973 }
1974 else
1975 {
1976 if (lpY <= lpM)
1977 szBuff[0] = '2'; /* Y-M-D */
1978 else
1979 szBuff[0] = '0'; /* M-D-Y */
1980 }
1981
1982 szBuff[1] = '\0';
1983
1986 else
1988
1990
1991 WriteProfileStringW( intlW, value->name, szBuff );
1992
1994 status = NtSetValueKey( hkey, &valueW, 0, REG_SZ, szBuff, sizeof(szBuff) );
1995
1997 HeapFree( GetProcessHeap(), 0, value->cached_value );
1998 value->cached_value = NULL;
2000 }
2001
2002 NtClose( hkey );
2003
2005 return !status;
2006}
static const WCHAR valueW[]
Definition: object.c:48
BOOL WINAPI WriteProfileStringW(LPCWSTR section, LPCWSTR entry, LPCWSTR string)
Definition: profile.c:1287
#define strrchrW(s, c)
Definition: unicode.h:41

Referenced by locale_update_registry(), and SetLocaleInfoA().

◆ SetThreadLocale()

BOOL WINAPI SetThreadLocale ( LCID  lcid)

Definition at line 2820 of file locale.c.

2821{
2822 TRACE("(0x%04X)\n", lcid);
2823
2824 lcid = ConvertDefaultLocale(lcid);
2825
2826 if (lcid != GetThreadLocale())
2827 {
2828 if (!IsValidLocale(lcid, LCID_SUPPORTED))
2829 {
2831 return FALSE;
2832 }
2833
2834 NtCurrentTeb()->CurrentLocale = lcid;
2835 }
2836 return TRUE;
2837}
BOOL WINAPI IsValidLocale(LCID lcid, DWORD flags)
Definition: locale.c:2923
#define LCID_SUPPORTED
Definition: winnls.h:204

Referenced by enum_proc(), LocaleDlgProc(), SetLocale(), SetTEBLangID(), SetupOpenInfFileExW(), and test_threadcp().

◆ SetThreadPreferredUILanguages()

BOOL WINAPI SetThreadPreferredUILanguages ( DWORD  flags,
PCZZWSTR  buffer,
PULONG  count 
)

Definition at line 1320 of file locale.c.

1321{
1322 FIXME( "%u, %p, %p\n", flags, buffer, count );
1323 return TRUE;
1324}

◆ SetThreadUILanguage()

LANGID WINAPI SetThreadUILanguage ( LANGID  langid)

Definition at line 2855 of file locale.c.

2856{
2857 TRACE("(0x%04x) stub - returning success\n", langid);
2858 return langid;
2859}

◆ setup_unix_locales()

static UINT setup_unix_locales ( void  )
static

Definition at line 1111 of file locale.c.

1112{
1113 struct locale_name locale_name;
1114 WCHAR buffer[128], ctype_buff[128];
1115 const char *locale;
1116 UINT unix_cp = 0;
1117
1118 if ((locale = get_locale( LC_CTYPE, "LC_CTYPE" )))
1119 {
1120 strcpynAtoW( ctype_buff, locale, sizeof(ctype_buff)/sizeof(WCHAR) );
1121 parse_locale_name( ctype_buff, &locale_name );
1123 unix_cp = locale_name.codepage;
1124 }
1125 if (!lcid_LC_CTYPE) /* this one needs a default value */
1127
1128 TRACE( "got lcid %04x (%d matches) for LC_CTYPE=%s\n",
1130
1131#define GET_UNIX_LOCALE(cat) do \
1132 if ((locale = get_locale( cat, #cat ))) \
1133 { \
1134 strcpynAtoW( buffer, locale, sizeof(buffer)/sizeof(WCHAR) ); \
1135 if (!strcmpW( buffer, ctype_buff )) lcid_##cat = lcid_LC_CTYPE; \
1136 else { \
1137 parse_locale_name( buffer, &locale_name ); \
1138 lcid_##cat = locale_name.lcid; \
1139 TRACE( "got lcid %04x (%d matches) for " #cat "=%s\n", \
1140 locale_name.lcid, locale_name.matches, debugstr_a(locale) ); \
1141 } \
1142 } while (0)
1143
1145 GET_UNIX_LOCALE( LC_MESSAGES );
1149#ifdef LC_PAPER
1150 GET_UNIX_LOCALE( LC_PAPER );
1151#endif
1152#ifdef LC_MEASUREMENT
1153 GET_UNIX_LOCALE( LC_MEASUREMENT );
1154#endif
1155#ifdef LC_TELEPHONE
1156 GET_UNIX_LOCALE( LC_TELEPHONE );
1157#endif
1158
1159#undef GET_UNIX_LOCALE
1160
1161 return unix_cp;
1162}
static void strcpynAtoW(WCHAR *dst, const char *src, size_t n)
Definition: locale.c:267
#define GET_UNIX_LOCALE(cat)
#define LC_MONETARY
Definition: locale.h:20
#define LC_TIME
Definition: locale.h:22
#define LC_COLLATE
Definition: locale.h:18
#define LANG_ENGLISH
Definition: nls.h:52
UINT codepage
Definition: locale.c:157

Referenced by LOCALE_Init().

◆ SetUserGeoID()

BOOL WINAPI SetUserGeoID ( GEOID  GeoID)

Definition at line 4875 of file locale.c.

4876{
4877 static const WCHAR geoW[] = {'G','e','o',0};
4878 static const WCHAR nationW[] = {'N','a','t','i','o','n',0};
4879 static const WCHAR formatW[] = {'%','i',0};
4880 UNICODE_STRING nameW,keyW;
4881 WCHAR bufferW[10];
4883 HANDLE hkey;
4884
4885 if(!(hkey = create_registry_key())) return FALSE;
4886
4887 attr.Length = sizeof(attr);
4888 attr.RootDirectory = hkey;
4889 attr.ObjectName = &nameW;
4890 attr.Attributes = 0;
4891 attr.SecurityDescriptor = NULL;
4892 attr.SecurityQualityOfService = NULL;
4893 RtlInitUnicodeString( &nameW, geoW );
4894 RtlInitUnicodeString( &keyW, nationW );
4895
4896 if (NtCreateKey( &hkey, KEY_ALL_ACCESS, &attr, 0, NULL, 0, NULL ) != STATUS_SUCCESS)
4897
4898 {
4899 NtClose(attr.RootDirectory);
4900 return FALSE;
4901 }
4902
4903 sprintfW(bufferW, formatW, GeoID);
4904 NtSetValueKey(hkey, &keyW, 0, REG_SZ, bufferW, (strlenW(bufferW) + 1) * sizeof(WCHAR));
4905 NtClose(attr.RootDirectory);
4906 NtClose(hkey);
4907 return TRUE;
4908}

◆ strcpynAtoW()

static void strcpynAtoW ( WCHAR dst,
const char src,
size_t  n 
)
inlinestatic

Definition at line 267 of file locale.c.

268{
269 while (n > 1 && *src)
270 {
271 *dst++ = (unsigned char)*src++;
272 n--;
273 }
274 if (n) *dst = 0;
275}
unsigned char
Definition: typeof.h:29

Referenced by setup_unix_locales().

◆ utf7_can_directly_encode()

static BOOL utf7_can_directly_encode ( WCHAR  codepoint)
inlinestatic

Definition at line 2551 of file locale.c.

2552{
2553 static const BOOL directly_encodable_table[] =
2554 {
2555 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, /* 0x00 - 0x0F */
2556 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10 - 0x1F */
2557 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, /* 0x20 - 0x2F */
2558 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, /* 0x30 - 0x3F */
2559 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x40 - 0x4F */
2560 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, /* 0x50 - 0x5F */
2561 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x60 - 0x6F */
2562 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 /* 0x70 - 0x7A */
2563 };
2564
2565 return codepoint <= 0x7A ? directly_encodable_table[codepoint] : FALSE;
2566}

Referenced by utf7_wcstombs().

◆ utf7_mbstowcs()

static int utf7_mbstowcs ( const char src,
int  srclen,
WCHAR dst,
int  dstlen 
)
static

Definition at line 2350 of file locale.c.

2351{
2352 static const signed char base64_decoding_table[] =
2353 {
2354 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 0x00-0x0F */
2355 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 0x10-0x1F */
2356 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, /* 0x20-0x2F */
2357 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, /* 0x30-0x3F */
2358 -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, /* 0x40-0x4F */
2359 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, /* 0x50-0x5F */
2360 -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, /* 0x60-0x6F */
2361 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1 /* 0x70-0x7F */
2362 };
2363
2364 const char *source_end = src + srclen;
2365 int dest_index = 0;
2366
2367 DWORD byte_pair = 0;
2368 short offset = 0;
2369
2370 while (src < source_end)
2371 {
2372 if (*src == '+')
2373 {
2374 src++;
2375 if (src >= source_end)
2376 break;
2377
2378 if (*src == '-')
2379 {
2380 /* just a plus sign escaped as +- */
2381 if (!utf7_write_w(dst, dstlen, &dest_index, '+'))
2382 return -1;
2383 src++;
2384 continue;
2385 }
2386
2387 do
2388 {
2389 signed char sextet = *src;
2390 if (sextet == '-')
2391 {
2392 /* skip over the dash and end base64 decoding
2393 * the current, unfinished byte pair is discarded */
2394 src++;
2395 offset = 0;
2396 break;
2397 }
2398 if (sextet < 0)
2399 {
2400 /* the next character of src is < 0 and therefore not part of a base64 sequence
2401 * the current, unfinished byte pair is NOT discarded in this case
2402 * this is probably a bug in Windows */
2403 break;
2404 }
2405
2406 sextet = base64_decoding_table[sextet];
2407 if (sextet == -1)
2408 {
2409 /* -1 means that the next character of src is not part of a base64 sequence
2410 * in other words, all sextets in this base64 sequence have been processed
2411 * the current, unfinished byte pair is discarded */
2412 offset = 0;
2413 break;
2414 }
2415
2416 byte_pair = (byte_pair << 6) | sextet;
2417 offset += 6;
2418
2419 if (offset >= 16)
2420 {
2421 /* this byte pair is done */
2422 if (!utf7_write_w(dst, dstlen, &dest_index, (byte_pair >> (offset - 16)) & 0xFFFF))
2423 return -1;
2424 offset -= 16;
2425 }
2426
2427 src++;
2428 }
2429 while (src < source_end);
2430 }
2431 else
2432 {
2433 /* we have to convert to unsigned char in case *src < 0 */
2434 if (!utf7_write_w(dst, dstlen, &dest_index, (unsigned char)*src))
2435 return -1;
2436 src++;
2437 }
2438 }
2439
2440 return dest_index;
2441}
static BOOL utf7_write_w(WCHAR *dst, int dstlen, int *index, WCHAR character)
Definition: locale.c:2326
GLintptr offset
Definition: glext.h:5920

Referenced by MultiByteToWideChar().

◆ utf7_wcstombs()

static int utf7_wcstombs ( const WCHAR src,
int  srclen,
char dst,
int  dstlen 
)
static

Definition at line 2600 of file locale.c.

2601{
2602 static const char base64_encoding_table[] =
2603 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
2604
2605 const WCHAR *source_end = src + srclen;
2606 int dest_index = 0;
2607
2608 while (src < source_end)
2609 {
2610 if (*src == '+')
2611 {
2612 if (!utf7_write_c(dst, dstlen, &dest_index, '+'))
2613 return -1;
2614 if (!utf7_write_c(dst, dstlen, &dest_index, '-'))
2615 return -1;
2616 src++;
2617 }
2618 else if (utf7_can_directly_encode(*src))
2619 {
2620 if (!utf7_write_c(dst, dstlen, &dest_index, *src))
2621 return -1;
2622 src++;
2623 }
2624 else
2625 {
2626 unsigned int offset = 0;
2627 DWORD byte_pair = 0;
2628
2629 if (!utf7_write_c(dst, dstlen, &dest_index, '+'))
2630 return -1;
2631
2632 while (src < source_end && !utf7_can_directly_encode(*src))
2633 {
2634 byte_pair = (byte_pair << 16) | *src;
2635 offset += 16;
2636 while (offset >= 6)
2637 {
2638 if (!utf7_write_c(dst, dstlen, &dest_index, base64_encoding_table[(byte_pair >> (offset - 6)) & 0x3F]))
2639 return -1;
2640 offset -= 6;
2641 }
2642 src++;
2643 }
2644
2645 if (offset)
2646 {
2647 /* Windows won't create a padded base64 character if there's no room for the - sign
2648 * as well ; this is probably a bug in Windows */
2649 if (dstlen > 0 && dest_index + 1 >= dstlen)
2650 return -1;
2651
2652 byte_pair <<= (6 - offset);
2653 if (!utf7_write_c(dst, dstlen, &dest_index, base64_encoding_table[byte_pair & 0x3F]))
2654 return -1;
2655 }
2656
2657 /* Windows always explicitly terminates the base64 sequence
2658 even though RFC 2152 (page 3, rule 2) does not require this */
2659 if (!utf7_write_c(dst, dstlen, &dest_index, '-'))
2660 return -1;
2661 }
2662 }
2663
2664 return dest_index;
2665}
static BOOL utf7_can_directly_encode(WCHAR codepoint)
Definition: locale.c:2551
static BOOL utf7_write_c(char *dst, int dstlen, int *index, char character)
Definition: locale.c:2576

Referenced by WideCharToMultiByte().

◆ utf7_write_c()

static BOOL utf7_write_c ( char dst,
int  dstlen,
int index,
char  character 
)
inlinestatic

Definition at line 2576 of file locale.c.

2577{
2578 if (dstlen > 0)
2579 {
2580 if (*index >= dstlen)
2581 return FALSE;
2582
2583 dst[*index] = character;
2584 }
2585
2586 (*index)++;
2587
2588 return TRUE;
2589}
#define index(s, c)
Definition: various.h:29

Referenced by utf7_wcstombs().

◆ utf7_write_w()

static BOOL utf7_write_w ( WCHAR dst,
int  dstlen,
int index,
WCHAR  character 
)
inlinestatic

Definition at line 2326 of file locale.c.

2327{
2328 if (dstlen > 0)
2329 {
2330 if (*index >= dstlen)
2331 return FALSE;
2332
2333 dst[*index] = character;
2334 }
2335
2336 (*index)++;
2337
2338 return TRUE;
2339}

Referenced by utf7_mbstowcs().

◆ VerLanguageNameA()

DWORD WINAPI VerLanguageNameA ( DWORD  wLang,
LPSTR  szLang,
DWORD  nSize 
)

Definition at line 3073 of file locale.c.

3074{
3075 return GetLocaleInfoA( MAKELCID(wLang, SORT_DEFAULT), LOCALE_SENGLANGUAGE, szLang, nSize );
3076}
INT WINAPI GetLocaleInfoA(LCID lcid, LCTYPE lctype, LPSTR buffer, INT len)
Definition: locale.c:1600
*nSize LPSTR _Inout_ LPDWORD nSize
Definition: winbase.h:2115
#define LOCALE_SENGLANGUAGE
Definition: winnls.h:27

◆ VerLanguageNameW()

DWORD WINAPI VerLanguageNameW ( DWORD  wLang,
LPWSTR  szLang,
DWORD  nSize 
)

Definition at line 3084 of file locale.c.

3085{
3086 return GetLocaleInfoW( MAKELCID(wLang, SORT_DEFAULT), LOCALE_SENGLANGUAGE, szLang, nSize );
3087}

Referenced by CFileVersionInfo::GetLangName().

◆ WideCharToMultiByte()

INT WINAPI WideCharToMultiByte ( UINT  page,
DWORD  flags,
LPCWSTR  src,
INT  srclen,
LPSTR  dst,
INT  dstlen,
LPCSTR  defchar,
BOOL used 
)

Definition at line 2692 of file locale.c.

2694{
2695 const union cptable *table;
2696 int ret, used_tmp;
2697
2698 if (!src || !srclen || (!dst && dstlen) || dstlen < 0)
2699 {
2701 return 0;
2702 }
2703
2704 if (srclen < 0) srclen = strlenW(src) + 1;
2705
2706 switch(page)
2707 {
2708 case CP_SYMBOL:
2709 /* when using CP_SYMBOL, ERROR_INVALID_FLAGS takes precedence */
2710 if (flags)
2711 {
2713 return 0;
2714 }
2715 if (defchar || used)
2716 {
2718 return 0;
2719 }
2721 break;
2722 case CP_UTF7:
2723 /* when using CP_UTF7, ERROR_INVALID_PARAMETER takes precedence */
2724 if (defchar || used)
2725 {
2727 return 0;
2728 }
2729 if (flags)
2730 {
2732 return 0;
2733 }
2735 break;
2736 case CP_UNIXCP:
2737 if (unix_cptable)
2738 {
2740 defchar, used ? &used_tmp : NULL );
2741 break;
2742 }
2743 /* fall through */
2744 case CP_UTF8:
2745 if (defchar || used)
2746 {
2748 return 0;
2749 }
2750 if (flags & ~WC_FLAGSMASK)
2751 {
2753 return 0;
2754 }
2756 break;
2757 default:
2758 if (!(table = get_codepage_table( page )))
2759 {
2761 return 0;
2762 }
2763 if (flags & ~WC_FLAGSMASK)
2764 {
2766 return 0;
2767 }
2769 defchar, used ? &used_tmp : NULL );
2770 if (used) *used = used_tmp;
2771 break;
2772 }
2773
2774 if (ret < 0)
2775 {
2776 switch(ret)
2777 {
2778 case -1: SetLastError( ERROR_INSUFFICIENT_BUFFER ); break;
2779 case -2: SetLastError( ERROR_NO_UNICODE_TRANSLATION ); break;
2780 }
2781 ret = 0;
2782 }
2783 TRACE("cp %d %s -> %s, ret = %d\n",
2785 return ret;
2786}
static int used
Definition: adh-main.c:39
#define WC_FLAGSMASK
Definition: locale.c:61
static int utf7_wcstombs(const WCHAR *src, int srclen, char *dst, int dstlen)
Definition: locale.c:2600
int wine_cpsymbol_wcstombs(const WCHAR *src, int srclen, char *dst, int dstlen)
int wine_utf8_wcstombs(int flags, const WCHAR *src, int srclen, char *dst, int dstlen)
Definition: utf8.c:98
int wine_cp_wcstombs(const union cptable *table, int flags, const WCHAR *src, int srclen, char *dst, int dstlen, const char *defchar, int *used)
Definition: wctomb.c:411

◆ wine_compare_string()

int wine_compare_string ( int  flags,
const WCHAR str1,
int  len1,
const WCHAR str2,
int  len2 
)

Definition at line 358 of file sortkey.c.

360{
361 int ret;
362
363 ret = compare_unicode_weights(flags, str1, len1, str2, len2);
364 if (!ret)
365 {
366 if (!(flags & NORM_IGNORENONSPACE))
367 ret = compare_diacritic_weights(flags, str1, len1, str2, len2);
368 if (!ret && !(flags & NORM_IGNORECASE))
369 ret = compare_case_weights(flags, str1, len1, str2, len2);
370 }
371 return ret;
372}
static int compare_case_weights(int flags, const WCHAR *str1, int len1, const WCHAR *str2, int len2)
Definition: sortkey.c:299
static int compare_diacritic_weights(int flags, const WCHAR *str1, int len1, const WCHAR *str2, int len2)
Definition: sortkey.c:240
static int compare_unicode_weights(int flags, const WCHAR *str1, int len1, const WCHAR *str2, int len2)
Definition: sortkey.c:159

Referenced by CompareStringEx().

◆ wine_fold_string()

int wine_fold_string ( int  flags,
const WCHAR src,
int  srclen,
WCHAR dst,
int  dstlen 
)

Definition at line 118 of file fold.c.

119{
120 WCHAR *dstbase = dst;
121 const WCHAR *expand;
122 int i;
123
124 if (srclen == -1)
125 srclen = strlenW(src) + 1; /* Include terminating NUL in count */
126
127 if (!dstlen)
128 {
129 /* Calculate the required size for dst */
130 dstlen = srclen;
131
132 if (flags & MAP_EXPAND_LIGATURES)
133 {
134 while (srclen--)
135 {
137 src++;
138 }
139 }
140 else if (flags & MAP_COMPOSITE)
141 {
142 /* FIXME */
143 }
144 else if (flags & MAP_PRECOMPOSED)
145 {
146 /* FIXME */
147 }
148 return dstlen;
149 }
150
151 if (srclen > dstlen)
152 return 0;
153
154 dstlen -= srclen;
155
156 /* Actually perform the mapping(s) specified */
157 for (i = 0; i < srclen; i++)
158 {
159 WCHAR ch = *src;
160
161 if (flags & MAP_EXPAND_LIGATURES)
162 {
163 expand = get_ligature(ch);
164 if (expand[0])
165 {
166 if (!dstlen--)
167 return 0;
168 dst[0] = expand[0];
169 if (expand[2])
170 {
171 if (!dstlen--)
172 return 0;
173 *++dst = expand[1];
174 ch = expand[2];
175 }
176 else
177 ch = expand[1];
178 dst++;
179 }
180 }
181 else if (flags & MAP_COMPOSITE)
182 {
183 /* FIXME */
184 }
185 else if (flags & MAP_PRECOMPOSED)
186 {
187 /* FIXME */
188 }
189 if (flags & MAP_FOLDDIGITS)
190 ch = to_unicode_digit(ch);
191 if (flags & MAP_FOLDCZONE)
192 ch = to_unicode_native(ch);
193
194 *dst++ = ch;
195 src++;
196 }
197 return dst - dstbase;
198}
static BOOL expand(LPINT ac, LPTSTR **arg, LPCTSTR pattern)
Definition: misc.c:228
static WCHAR to_unicode_digit(WCHAR ch)
Definition: fold.c:23
static WCHAR to_unicode_native(WCHAR ch)
Definition: fold.c:29
static const WCHAR * get_ligature(WCHAR wc)
Definition: fold.c:100
static int get_ligature_len(WCHAR wc)
Definition: fold.c:84
#define MAP_FOLDDIGITS
Definition: winnls.h:216

Referenced by FoldStringW().

◆ wine_get_sortkey()

int wine_get_sortkey ( int  flags,
const WCHAR src,
int  srclen,
char dst,
int  dstlen 
)

Definition at line 33 of file sortkey.c.

34{
35 WCHAR dummy[4]; /* no decomposition is larger than 4 chars */
36 int key_len[4];
37 char *key_ptr[4];
38 const WCHAR *src_save = src;
39 int srclen_save = srclen;
40
41 key_len[0] = key_len[1] = key_len[2] = key_len[3] = 0;
42 for (; srclen; srclen--, src++)
43 {
44 unsigned int i, decomposed_len = 1;/*wine_decompose(*src, dummy, 4);*/
45 dummy[0] = *src;
46 if (decomposed_len)
47 {
48 for (i = 0; i < decomposed_len; i++)
49 {
50 WCHAR wch = dummy[i];
51 unsigned int ce;
52
53 /* tests show that win2k just ignores NORM_IGNORENONSPACE,
54 * and skips white space and punctuation characters for
55 * NORM_IGNORESYMBOLS.
56 */
58 continue;
59
60 if (flags & NORM_IGNORECASE) wch = tolowerW(wch);
61
62 ce = collation_table[collation_table[wch >> 8] + (wch & 0xff)];
63 if (ce != (unsigned int)-1)
64 {
65 if (ce >> 16) key_len[0] += 2;
66 if ((ce >> 8) & 0xff) key_len[1]++;
67 if ((ce >> 4) & 0x0f) key_len[2]++;
68 if (ce & 1)
69 {
70 if (wch >> 8) key_len[3]++;
71 key_len[3]++;
72 }
73 }
74 else
75 {
76 key_len[0] += 2;
77 if (wch >> 8) key_len[0]++;
78 if (wch & 0xff) key_len[0]++;
79 }
80 }
81 }
82 }
83
84 if (!dstlen) /* compute length */
85 /* 4 * '\1' + 1 * '\0' + key length */
86 return key_len[0] + key_len[1] + key_len[2] + key_len[3] + 4 + 1;
87
88 if (dstlen < key_len[0] + key_len[1] + key_len[2] + key_len[3] + 4 + 1)
89 return 0; /* overflow */
90
91 src = src_save;
92 srclen = srclen_save;
93
94 key_ptr[0] = dst;
95 key_ptr[1] = key_ptr[0] + key_len[0] + 1;
96 key_ptr[2] = key_ptr[1] + key_len[1] + 1;
97 key_ptr[3] = key_ptr[2] + key_len[2] + 1;
98
99 for (; srclen; srclen--, src++)
100 {
101 unsigned int i, decomposed_len = 1;/*wine_decompose(*src, dummy, 4);*/
102 dummy[0] = *src;
103 if (decomposed_len)
104 {
105 for (i = 0; i < decomposed_len; i++)
106 {
107 WCHAR wch = dummy[i];
108 unsigned int ce;
109
110 /* tests show that win2k just ignores NORM_IGNORENONSPACE,
111 * and skips white space and punctuation characters for
112 * NORM_IGNORESYMBOLS.
113 */
115 continue;
116
117 if (flags & NORM_IGNORECASE) wch = tolowerW(wch);
118
119 ce = collation_table[collation_table[wch >> 8] + (wch & 0xff)];
120 if (ce != (unsigned int)-1)
121 {
122 WCHAR key;
123 if ((key = ce >> 16))
124 {
125 *key_ptr[0]++ = key >> 8;
126 *key_ptr[0]++ = key & 0xff;
127 }
128 /* make key 1 start from 2 */
129 if ((key = (ce >> 8) & 0xff)) *key_ptr[1]++ = key + 1;
130 /* make key 2 start from 2 */
131 if ((key = (ce >> 4) & 0x0f)) *key_ptr[2]++ = key + 1;
132 /* key 3 is always a character code */
133 if (ce & 1)
134 {
135 if (wch >> 8) *key_ptr[3]++ = wch >> 8;
136 if (wch & 0xff) *key_ptr[3]++ = wch & 0xff;
137 }
138 }
139 else
140 {
141 *key_ptr[0]++ = 0xff;
142 *key_ptr[0]++ = 0xfe;
143 if (wch >> 8) *key_ptr[0]++ = wch >> 8;
144 if (wch & 0xff) *key_ptr[0]++ = wch & 0xff;
145 }
146 }
147 }
148 }
149
150 *key_ptr[0] = '\1';
151 *key_ptr[1] = '\1';
152 *key_ptr[2] = '\1';
153 *key_ptr[3]++ = '\1';
154 *key_ptr[3] = 0;
155
156 return key_ptr[3] - dst;
157}
const unsigned int collation_table[]
Definition: collation.c:5
#define C1_PUNCT
Definition: unicode.h:35
Definition: copy.c:22

Referenced by LCMapStringA(), and LCMapStringEx().

Variable Documentation

◆ ansi_cptable

const union cptable* ansi_cptable
static

Definition at line 65 of file locale.c.

Referenced by get_codepage_table(), GetACP(), IsDBCSLeadByte(), LOCALE_Init(), and SetCPGlobal().

◆ cache_section

RTL_CRITICAL_SECTION cache_section = { NULL, -1, 0, 0, 0, 0 }
static

Definition at line 263 of file locale.c.

Referenced by get_registry_locale_info(), and SetLocaleInfoW().

◆ geoinfodata

const struct geoinfo_t geoinfodata[]
static

Definition at line 5014 of file locale.c.

Referenced by EnumSystemGeoID(), and get_geoinfo_dataptr().

◆ iCalendarTypeW

const WCHAR iCalendarTypeW[] = {'i','C','a','l','e','n','d','a','r','T','y','p','e',0}
static

Definition at line 171 of file locale.c.

◆ iCountryW

const WCHAR iCountryW[] = {'i','C','o','u','n','t','r','y',0}
static

Definition at line 172 of file locale.c.

◆ iCurrDigitsW

const WCHAR iCurrDigitsW[] = {'i','C','u','r','r','D','i','g','i','t','s',0}
static

Definition at line 173 of file locale.c.

◆ iCurrencyW

const WCHAR iCurrencyW[] = {'i','C','u','r','r','e','n','c','y',0}
static

Definition at line 174 of file locale.c.

◆ iDateW

const WCHAR iDateW[] = {'i','D','a','t','e',0}
static

Definition at line 175 of file locale.c.

◆ iDigitsW

const WCHAR iDigitsW[] = {'i','D','i','g','i','t','s',0}
static

Definition at line 176 of file locale.c.

◆ iFirstDayOfWeekW

const WCHAR iFirstDayOfWeekW[] = {'i','F','i','r','s','t','D','a','y','O','f','W','e','e','k',0}
static

Definition at line 177 of file locale.c.

◆ iFirstWeekOfYearW

const WCHAR iFirstWeekOfYearW[] = {'i','F','i','r','s','t','W','e','e','k','O','f','Y','e','a','r',0}
static

Definition at line 178 of file locale.c.

◆ iLDateW

const WCHAR iLDateW[] = {'i','L','D','a','t','e',0}
static

Definition at line 179 of file locale.c.

◆ iLZeroW

const WCHAR iLZeroW[] = {'i','L','Z','e','r','o',0}
static

Definition at line 180 of file locale.c.

◆ iMeasureW

const WCHAR iMeasureW[] = {'i','M','e','a','s','u','r','e',0}
static

Definition at line 181 of file locale.c.

◆ iNegCurrW

const WCHAR iNegCurrW[] = {'i','N','e','g','C','u','r','r',0}
static

Definition at line 182 of file locale.c.

◆ iNegNumberW

const WCHAR iNegNumberW[] = {'i','N','e','g','N','u','m','b','e','r',0}
static

Definition at line 183 of file locale.c.

◆ iPaperSizeW

const WCHAR iPaperSizeW[] = {'i','P','a','p','e','r','S','i','z','e',0}
static

Definition at line 184 of file locale.c.

◆ iTimePrefixW

const WCHAR iTimePrefixW[] = {'i','T','i','m','e','P','r','e','f','i','x',0}
static

Definition at line 186 of file locale.c.

◆ iTimeW

const WCHAR iTimeW[] = {'i','T','i','m','e',0}
static

Definition at line 187 of file locale.c.

◆ iTLZeroW

const WCHAR iTLZeroW[] = {'i','T','L','Z','e','r','o',0}
static

Definition at line 185 of file locale.c.

◆ kernel32_handle

◆ lcid_LC_COLLATE

LCID lcid_LC_COLLATE
static

Definition at line 161 of file locale.c.

Referenced by convert_default_lcid().

◆ lcid_LC_CTYPE

LCID lcid_LC_CTYPE
static

◆ lcid_LC_MEASUREMENT

LCID lcid_LC_MEASUREMENT
static

Definition at line 168 of file locale.c.

Referenced by convert_default_lcid(), and LOCALE_InitRegistry().

◆ lcid_LC_MESSAGES

LCID lcid_LC_MESSAGES
static

Definition at line 163 of file locale.c.

Referenced by LOCALE_Init(), and LOCALE_InitRegistry().

◆ lcid_LC_MONETARY

LCID lcid_LC_MONETARY
static

Definition at line 164 of file locale.c.

Referenced by convert_default_lcid(), and LOCALE_InitRegistry().

◆ lcid_LC_NUMERIC

LCID lcid_LC_NUMERIC
static

Definition at line 165 of file locale.c.

Referenced by convert_default_lcid(), and LOCALE_InitRegistry().

◆ lcid_LC_PAPER

LCID lcid_LC_PAPER
static

Definition at line 167 of file locale.c.

Referenced by convert_default_lcid(), and LOCALE_InitRegistry().

◆ lcid_LC_TELEPHONE

LCID lcid_LC_TELEPHONE
static

Definition at line 169 of file locale.c.

Referenced by convert_default_lcid(), and LOCALE_InitRegistry().

◆ lcid_LC_TIME

LCID lcid_LC_TIME
static

Definition at line 166 of file locale.c.

Referenced by convert_default_lcid(), and LOCALE_InitRegistry().

◆ mac_cptable

const union cptable* mac_cptable
static

Definition at line 67 of file locale.c.

Referenced by get_codepage_table(), and LOCALE_Init().

◆ NumShapeW

const WCHAR NumShapeW[] = {'N','u','m','s','h','a','p','e',0}
static

Definition at line 209 of file locale.c.

◆ oem_cptable

const union cptable* oem_cptable
static

Definition at line 66 of file locale.c.

Referenced by get_codepage_table(), GetOEMCP(), and LOCALE_Init().

◆ registry_values

struct registry_value registry_values[]
static

◆ s1159W

const WCHAR s1159W[] = {'s','1','1','5','9',0}
static

Definition at line 188 of file locale.c.

◆ s2359W

const WCHAR s2359W[] = {'s','2','3','5','9',0}
static

Definition at line 189 of file locale.c.

◆ sCountryW

const WCHAR sCountryW[] = {'s','C','o','u','n','t','r','y',0}
static

Definition at line 190 of file locale.c.

◆ sCurrencyW

const WCHAR sCurrencyW[] = {'s','C','u','r','r','e','n','c','y',0}
static

Definition at line 191 of file locale.c.

◆ sDateW

const WCHAR sDateW[] = {'s','D','a','t','e',0}
static

Definition at line 192 of file locale.c.

◆ sDecimalW

const WCHAR sDecimalW[] = {'s','D','e','c','i','m','a','l',0}
static

Definition at line 193 of file locale.c.

◆ sGroupingW

const WCHAR sGroupingW[] = {'s','G','r','o','u','p','i','n','g',0}
static

Definition at line 194 of file locale.c.

◆ sLanguageW

const WCHAR sLanguageW[] = {'s','L','a','n','g','u','a','g','e',0}
static

Definition at line 195 of file locale.c.

◆ sListW

const WCHAR sListW[] = {'s','L','i','s','t',0}
static

Definition at line 196 of file locale.c.

◆ sLongDateW

const WCHAR sLongDateW[] = {'s','L','o','n','g','D','a','t','e',0}
static

Definition at line 197 of file locale.c.

◆ sMonDecimalSepW

const WCHAR sMonDecimalSepW[] = {'s','M','o','n','D','e','c','i','m','a','l','S','e','p',0}
static

Definition at line 198 of file locale.c.

◆ sMonGroupingW

const WCHAR sMonGroupingW[] = {'s','M','o','n','G','r','o','u','p','i','n','g',0}
static

Definition at line 199 of file locale.c.

◆ sMonThousandSepW

const WCHAR sMonThousandSepW[] = {'s','M','o','n','T','h','o','u','s','a','n','d','S','e','p',0}
static

Definition at line 200 of file locale.c.

◆ sNativeDigitsW

const WCHAR sNativeDigitsW[] = {'s','N','a','t','i','v','e','D','i','g','i','t','s',0}
static

Definition at line 201 of file locale.c.

◆ sNegativeSignW

const WCHAR sNegativeSignW[] = {'s','N','e','g','a','t','i','v','e','S','i','g','n',0}
static

Definition at line 202 of file locale.c.

◆ sPositiveSignW

const WCHAR sPositiveSignW[] = {'s','P','o','s','i','t','i','v','e','S','i','g','n',0}
static

Definition at line 203 of file locale.c.

◆ sShortDateW

const WCHAR sShortDateW[] = {'s','S','h','o','r','t','D','a','t','e',0}
static

Definition at line 204 of file locale.c.

◆ sThousandW

const WCHAR sThousandW[] = {'s','T','h','o','u','s','a','n','d',0}
static

Definition at line 205 of file locale.c.

◆ sTimeFormatW

const WCHAR sTimeFormatW[] = {'s','T','i','m','e','F','o','r','m','a','t',0}
static

Definition at line 206 of file locale.c.

◆ sTimeW

const WCHAR sTimeW[] = {'s','T','i','m','e',0}
static

Definition at line 207 of file locale.c.

◆ sYearMonthW

const WCHAR sYearMonthW[] = {'s','Y','e','a','r','M','o','n','t','h',0}
static

Definition at line 208 of file locale.c.

◆ szLangGroupsKeyName

const WCHAR szLangGroupsKeyName[]
static
Initial value:
= {
'\\','R','e','g','i','s','t','r','y','\\','M','a','c','h','i','n','e','\\','S','y','s','t','e','m','\\',
'C','u','r','r','e','n','t','C','o','n','t','r','o','l','S','e','t','\\',
'C','o','n','t','r','o','l','\\','N','l','s','\\',
'L','a','n','g','u','a','g','e',' ','G','r','o','u','p','s',0
}

Definition at line 76 of file locale.c.

Referenced by IsValidLanguageGroup(), and NLS_EnumSystemLanguageGroups().

◆ szLocaleKeyName

const WCHAR szLocaleKeyName[]
static
Initial value:
= {
'\\','R','e','g','i','s','t','r','y','\\','M','a','c','h','i','n','e','\\','S','y','s','t','e','m','\\',
'C','u','r','r','e','n','t','C','o','n','t','r','o','l','S','e','t','\\',
'C','o','n','t','r','o','l','\\','N','l','s','\\','L','o','c','a','l','e',0
}

Definition at line 70 of file locale.c.

Referenced by NLS_EnumLanguageGroupLocales().

◆ unix_cptable

const union cptable* unix_cptable
static

Definition at line 68 of file locale.c.

Referenced by LOCALE_Init(), MultiByteToWideChar(), and WideCharToMultiByte().