ReactOS  0.4.14-dev-614-gbfd8a84
locale.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  MSVCRT_threadlocaleinfostruct
 
struct  MSVCRT_threadmbcinfostruct
 
struct  MSVCRT_localeinfo_struct
 
struct  __lc_time_data
 

Macros

#define MSVCRT_lconv   lconv
 
#define MSVCRT_locale   __get_MSVCRT_locale()
 

Typedefs

typedef struct MSVCRT_threadlocaleinfostruct MSVCRT_threadlocinfo
 
typedef struct MSVCRT_threadmbcinfostruct MSVCRT_threadmbcinfo
 
typedef struct MSVCRT_threadlocaleinfostructMSVCRT_pthreadlocinfo
 
typedef struct MSVCRT_threadmbcinfostructMSVCRT_pthreadmbcinfo
 
typedef struct MSVCRT_localeinfo_struct MSVCRT__locale_tstruct
 
typedef struct MSVCRT_localeinfo_structMSVCRT__locale_t
 
typedef struct __lc_time_data MSVCRT___lc_time_data
 

Functions

int _setmbcp_l (int, LCID, MSVCRT_pthreadmbcinfo) DECLSPEC_HIDDEN
 
MSVCRT_pthreadmbcinfo get_mbcinfo (void) DECLSPEC_HIDDEN
 
LCID MSVCRT_locale_to_LCID (const char *, unsigned short *) DECLSPEC_HIDDEN
 
void __init_global_locale ()
 
FORCEINLINE MSVCRT__locale_t __get_MSVCRT_locale ()
 
MSVCRT_pthreadlocinfo get_locinfo (void)
 
void __cdecl MSVCRT__free_locale (MSVCRT__locale_t)
 
void free_locinfo (MSVCRT_pthreadlocinfo)
 
void free_mbcinfo (MSVCRT_pthreadmbcinfo)
 

Variables

MSVCRT__locale_t global_locale
 

Macro Definition Documentation

◆ MSVCRT_lconv

Definition at line 40 of file locale.h.

◆ MSVCRT_locale

MSVCRT__locale_t MSVCRT_locale   __get_MSVCRT_locale()

Definition at line 78 of file locale.h.

Typedef Documentation

◆ MSVCRT___lc_time_data

◆ MSVCRT__locale_t

◆ MSVCRT__locale_tstruct

◆ MSVCRT_pthreadlocinfo

◆ MSVCRT_pthreadmbcinfo

Definition at line 43 of file locale.h.

◆ MSVCRT_threadlocinfo

◆ MSVCRT_threadmbcinfo

Function Documentation

◆ __get_MSVCRT_locale()

FORCEINLINE MSVCRT__locale_t __get_MSVCRT_locale ( )

Definition at line 79 of file locale.h.

80 {
81  if(!global_locale)
83  return global_locale;
84 }
void __init_global_locale()
Definition: locale.c:1496
MSVCRT__locale_t global_locale
Definition: locale.c:1495

◆ __init_global_locale()

void __init_global_locale ( )

Definition at line 1496 of file locale.c.

1497 {
1498  unsigned i;
1499 
1500  LOCK_LOCALE;
1501  /* Someone created it before us */
1502  if(global_locale)
1503  return;
1505 
1509  for(i=LC_MIN; i<=LC_MAX; i++)
1512  UNLOCK_LOCALE;
1513 }
#define LOCK_LOCALE
Definition: locale.c:43
#define LC_MIN
Definition: locale.h:32
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
#define UNLOCK_LOCALE
Definition: locale.c:44
unsigned int __lc_codepage
Definition: locale.c:34
int __cdecl _setmbcp(int)
Definition: _setmbcp.c:218
MSVCRT__locale_t CDECL MSVCRT__create_locale(int category, const char *locale)
Definition: locale.c:722
unsigned int lc_collate_cp
Definition: msvcrt.h:114
int MSVCRT___lc_collate_cp
Definition: locale.c:35
unsigned int lc_codepage
Definition: msvcrt.h:113
MSVCRT__locale_t MSVCRT_locale
Definition: msvcrt.h:885
MSVCRT_pthreadlocinfo locinfo
Definition: msvcrt.h:152
LCID MSVCRT___lc_handle[LC_MAX - LC_MIN+1]
Definition: locale.c:36
#define _MB_CP_ANSI
Definition: msvcrt.h:830
#define LC_MAX
Definition: locale.h:33
MSVCRT__locale_t global_locale
Definition: locale.c:1495
int __mb_cur_max
Definition: locale.c:37
MSVCRT_ulong lc_handle[6]
Definition: msvcrt.h:115

Referenced by __get_MSVCRT_locale().

◆ _setmbcp_l()

int _setmbcp_l ( int  ,
LCID  ,
MSVCRT_pthreadmbcinfo   
)

Definition at line 52 of file _setmbcp.c.

53 {
54  const char format[] = ".%d";
55 
56  int newcp;
57  CPINFO cpi;
58  BYTE *bytes;
59  WORD chartypes[256];
60  char bufA[256];
61  WCHAR bufW[256];
62  int charcount;
63  int ret;
64  int i;
65 
66  if(!mbcinfo)
67  mbcinfo = get_mbcinfo();
68 
69  switch (cp)
70  {
71  case _MB_CP_ANSI:
72  newcp = GetACP();
73  break;
74  case _MB_CP_OEM:
75  newcp = GetOEMCP();
76  break;
77  case _MB_CP_LOCALE:
78  newcp = get_locinfo()->lc_codepage;
79  if(newcp)
80  break;
81  /* fall through (C locale) */
82  case _MB_CP_SBCS:
83  newcp = 20127; /* ASCII */
84  break;
85  default:
86  newcp = cp;
87  break;
88  }
89 
90  if(lcid == -1) {
91  sprintf(bufA, format, newcp);
92  mbcinfo->mblcid = MSVCRT_locale_to_LCID(bufA, NULL);
93  } else {
94  mbcinfo->mblcid = lcid;
95  }
96 
97  if(mbcinfo->mblcid == -1)
98  {
99  WARN("Can't assign LCID to codepage (%d)\n", mbcinfo->mblcid);
100  mbcinfo->mblcid = 0;
101  }
102 
103  if (!GetCPInfo(newcp, &cpi))
104  {
105  WARN("Codepage %d not found\n", newcp);
106  *_errno() = EINVAL;
107  return -1;
108  }
109 
110  /* setup the _mbctype */
111  memset(mbcinfo->mbctype, 0, sizeof(unsigned char[257]));
112  memset(mbcinfo->mbcasemap, 0, sizeof(unsigned char[256]));
113 
114  bytes = cpi.LeadByte;
115  while (bytes[0] || bytes[1])
116  {
117  for (i = bytes[0]; i <= bytes[1]; i++)
118  mbcinfo->mbctype[i + 1] |= _M1;
119  bytes += 2;
120  }
121 
122  if (cpi.MaxCharSize > 1)
123  {
124  /* trail bytes not available through kernel32 but stored in a structure in msvcrt */
125  struct cp_extra_info_t *cpextra = g_cpextrainfo;
126 
127  mbcinfo->ismbcodepage = 1;
128  while (TRUE)
129  {
130  if (cpextra->cp == 0 || cpextra->cp == newcp)
131  {
132  if (cpextra->cp == 0)
133  FIXME("trail bytes data not available for DBCS codepage %d - assuming all bytes\n", newcp);
134 
135  bytes = cpextra->TrailBytes;
136  while (bytes[0] || bytes[1])
137  {
138  for (i = bytes[0]; i <= bytes[1]; i++)
139  mbcinfo->mbctype[i + 1] |= _M2;
140  bytes += 2;
141  }
142  break;
143  }
144  cpextra++;
145  }
146  }
147  else
148  mbcinfo->ismbcodepage = 0;
149 
150  /* we can't use GetStringTypeA directly because we don't have a locale - only a code page
151  */
152  charcount = 0;
153  for (i = 0; i < 256; i++)
154  if (!(mbcinfo->mbctype[i + 1] & _M1))
155  bufA[charcount++] = i;
156 
157  ret = MultiByteToWideChar(newcp, 0, bufA, charcount, bufW, charcount);
158  if (ret != charcount)
159  ERR("MultiByteToWideChar of chars failed for cp %d, ret=%d (exp %d), error=%d\n", newcp, ret, charcount, GetLastError());
160 
161  GetStringTypeW(CT_CTYPE1, bufW, charcount, chartypes);
162 
163  charcount = 0;
164  for (i = 0; i < 256; i++)
165  if (!(mbcinfo->mbctype[i + 1] & _M1))
166  {
167  if (chartypes[charcount] & C1_UPPER)
168  {
169  mbcinfo->mbctype[i + 1] |= _SBUP;
170  bufW[charcount] = tolowerW(bufW[charcount]);
171  }
172  else if (chartypes[charcount] & C1_LOWER)
173  {
174  mbcinfo->mbctype[i + 1] |= _SBLOW;
175  bufW[charcount] = toupperW(bufW[charcount]);
176  }
177  charcount++;
178  }
179 
180  ret = WideCharToMultiByte(newcp, 0, bufW, charcount, bufA, charcount, NULL, NULL);
181  if (ret != charcount)
182  ERR("WideCharToMultiByte failed for cp %d, ret=%d (exp %d), error=%d\n", newcp, ret, charcount, GetLastError());
183 
184  charcount = 0;
185  for (i = 0; i < 256; i++)
186  {
187  if(!(mbcinfo->mbctype[i + 1] & _M1))
188  {
189  if(mbcinfo->mbctype[i] & (C1_UPPER|C1_LOWER))
190  mbcinfo->mbcasemap[i] = bufA[charcount];
191  charcount++;
192  }
193  }
194 
195  if (newcp == 932) /* CP932 only - set _MP and _MS */
196  {
197  /* On Windows it's possible to calculate the _MP and _MS from CT_CTYPE1
198  * and CT_CTYPE3. But as of Wine 0.9.43 we return wrong values what makes
199  * it hard. As this is set only for codepage 932 we hardcode it what gives
200  * also faster execution.
201  */
202  for (i = 161; i <= 165; i++)
203  mbcinfo->mbctype[i + 1] |= _MP;
204  for (i = 166; i <= 223; i++)
205  mbcinfo->mbctype[i + 1] |= _MS;
206  }
207 
208  mbcinfo->mbcodepage = newcp;
209  if(global_locale && mbcinfo == MSVCRT_locale->mbcinfo)
211 
212  return 0;
213 }
BOOL WINAPI GetCPInfo(UINT CodePage, LPCPINFO CodePageInfo)
Definition: nls.c:1915
#define _MB_CP_OEM
Definition: msvcrt.h:829
#define TRUE
Definition: types.h:120
#define _M2
Definition: msvcrt.h:818
LCID MSVCRT_locale_to_LCID(const char *)
#define WideCharToMultiByte
Definition: compat.h:101
unsigned char mbctype[257]
Definition: msvcrt.h:143
Definition: arc.h:39
#define WARN(fmt,...)
Definition: debug.h:111
#define _MP
Definition: msvcrt.h:816
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1059
UINT MaxCharSize
Definition: winnls.h:578
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: gl.h:1546
#define C1_LOWER
Definition: unicode.h:32
#define sprintf(buf, format,...)
Definition: sprintf.c:55
#define _MB_CP_SBCS
Definition: msvcrt.h:828
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
#define _mbctype
Definition: mbctype.h:28
static unsigned char bytes[4]
Definition: adnsresfilter.c:74
BYTE TrailBytes[MAX_LEADBYTES]
Definition: _setmbcp.c:35
#define FIXME(fmt,...)
Definition: debug.h:110
MSVCRT_pthreadmbcinfo mbcinfo
Definition: msvcrt.h:153
smooth NULL
Definition: ftsmooth.c:416
UINT WINAPI GetACP(VOID)
Definition: nls.c:2180
#define get_locinfo()
Definition: winesup.h:25
WINE_UNICODE_INLINE WCHAR toupperW(WCHAR ch)
Definition: unicode.h:141
__wchar_t WCHAR
Definition: xmlstorage.h:180
BYTE LeadByte[MAX_LEADBYTES]
Definition: winnls.h:580
BOOL WINAPI GetStringTypeW(DWORD type, LPCWSTR src, INT count, LPWORD chartype)
Definition: lang.c:1699
#define _MS
Definition: msvcrt.h:815
unsigned short WORD
Definition: ntddk_ex.h:93
WINE_UNICODE_INLINE WCHAR tolowerW(WCHAR ch)
Definition: unicode.h:135
#define for
Definition: utility.h:88
#define _SBUP
Definition: msvcrt.h:820
#define CT_CTYPE1
Definition: winnls.h:234
_CRTIMP int *__cdecl _errno(void)
Definition: errno.c:19
MSVCRT__locale_t global_locale
Definition: locale.c:1495
int ret
#define _MB_CP_LOCALE
Definition: msvcrt.h:831
#define C1_UPPER
Definition: unicode.h:31
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
unsigned char BYTE
Definition: mem.h:68
MSVCRT_pthreadmbcinfo get_mbcinfo(void)
Definition: locale.c:364
#define ERR(fmt,...)
Definition: debug.h:109
MSVCRT__locale_t MSVCRT_locale
Definition: msvcrt.h:885
#define _MB_CP_ANSI
Definition: msvcrt.h:830
#define _SBLOW
Definition: msvcrt.h:821
#define MultiByteToWideChar
Definition: compat.h:100
static struct cp_extra_info_t g_cpextrainfo[]
Definition: _setmbcp.c:38
POINT cp
Definition: magnifier.c:59
#define memset(x, y, z)
Definition: compat.h:39
#define _M1
Definition: msvcrt.h:817
UINT WINAPI GetOEMCP(VOID)
Definition: nls.c:2195

Referenced by _setmbcp().

◆ free_locinfo()

void free_locinfo ( MSVCRT_pthreadlocinfo  )

Definition at line 641 of file locale.c.

642 {
643  int i;
644 
645  if(!locinfo)
646  return;
647 
648  if(InterlockedDecrement(&locinfo->refcount))
649  return;
650 
651  for(i=MSVCRT_LC_MIN+1; i<=MSVCRT_LC_MAX; i++) {
652  MSVCRT_free(locinfo->lc_category[i].locale);
653  MSVCRT_free(locinfo->lc_category[i].refcount);
654  }
655 
656  if(locinfo->lconv) {
657  MSVCRT_free(locinfo->lconv->decimal_point);
658  MSVCRT_free(locinfo->lconv->thousands_sep);
659  MSVCRT_free(locinfo->lconv->grouping);
660  MSVCRT_free(locinfo->lconv->int_curr_symbol);
661  MSVCRT_free(locinfo->lconv->currency_symbol);
662  MSVCRT_free(locinfo->lconv->mon_decimal_point);
663  MSVCRT_free(locinfo->lconv->mon_thousands_sep);
664  MSVCRT_free(locinfo->lconv->mon_grouping);
665  MSVCRT_free(locinfo->lconv->positive_sign);
666  MSVCRT_free(locinfo->lconv->negative_sign);
667  }
668  MSVCRT_free(locinfo->lconv_intl_refcount);
669  MSVCRT_free(locinfo->lconv_num_refcount);
670  MSVCRT_free(locinfo->lconv_mon_refcount);
671  MSVCRT_free(locinfo->lconv);
672 
673  MSVCRT_free(locinfo->ctype1_refcount);
674  MSVCRT_free(locinfo->ctype1);
675 
676  MSVCRT_free(locinfo->pclmap);
677  MSVCRT_free(locinfo->pcumap);
678 
679  MSVCRT_free(locinfo->lc_time_curr);
680 
682 }
#define MSVCRT_LC_MIN
Definition: msvcrt.h:656
void __cdecl MSVCRT_free(void *)
#define MSVCRT_LC_MAX
Definition: msvcrt.h:657
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
else locinfo
Definition: scanf.h:159
#define InterlockedDecrement
Definition: armddk.h:52

Referenced by _configthreadlocale(), and MSVCRT__free_locale().

◆ free_mbcinfo()

void free_mbcinfo ( MSVCRT_pthreadmbcinfo  )

Definition at line 685 of file locale.c.

686 {
687  if(!mbcinfo)
688  return;
689 
690  if(InterlockedDecrement(&mbcinfo->refcount))
691  return;
692 
693  MSVCRT_free(mbcinfo);
694 }
void __cdecl MSVCRT_free(void *)
#define InterlockedDecrement
Definition: armddk.h:52

Referenced by _configthreadlocale(), and MSVCRT__free_locale().

◆ get_locinfo()

MSVCRT_pthreadlocinfo get_locinfo ( void  )

Definition at line 354 of file locale.c.

354  {
356 
357  if(!data || !data->have_locale)
358  return MSVCRT_locale->locinfo;
359 
360  return data->locinfo;
361 }
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
thread_data_t * msvcrt_get_thread_data(void)
Definition: tls.c:31
MSVCRT__locale_t MSVCRT_locale
Definition: msvcrt.h:885
MSVCRT_pthreadlocinfo locinfo
Definition: msvcrt.h:152

Referenced by ___lc_collate_cp_func(), __p__pctype(), __pctype_func(), _Getdays(), _Getmonths(), _Gettnames(), localeconv(), MSVCRT__get_current_locale(), MSVCRT_btowc(), and setlocale().

◆ get_mbcinfo()

MSVCRT_pthreadmbcinfo get_mbcinfo ( void  )

Definition at line 364 of file locale.c.

364  {
366 
367  if(!data || !data->have_locale)
368  return MSVCRT_locale->mbcinfo;
369 
370  return data->mbcinfo;
371 }
MSVCRT_pthreadmbcinfo mbcinfo
Definition: msvcrt.h:153
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
thread_data_t * msvcrt_get_thread_data(void)
Definition: tls.c:31
MSVCRT__locale_t MSVCRT_locale
Definition: msvcrt.h:885

Referenced by _getmbcp(), and MSVCRT__get_current_locale().

◆ MSVCRT__free_locale()

void __cdecl MSVCRT__free_locale ( MSVCRT__locale_t  )

Definition at line 711 of file locale.c.

712 {
713  if (!locale)
714  return;
715 
716  free_locinfo(locale->locinfo);
717  free_mbcinfo(locale->mbcinfo);
719 }
void __cdecl MSVCRT_free(void *)
void free_locinfo(MSVCRT_pthreadlocinfo locinfo)
Definition: locale.c:641
Definition: _locale.h:75
void free_mbcinfo(MSVCRT_pthreadmbcinfo mbcinfo)
Definition: locale.c:685

Referenced by MSVCRT__create_locale(), and setlocale().

◆ MSVCRT_locale_to_LCID()

LCID MSVCRT_locale_to_LCID ( const char ,
unsigned short  
)

Definition at line 208 of file locale.c.

209 {
210  LCID lcid;
212  const char *cp, *region;
213 
214  memset(&search, 0, sizeof(locale_search_t));
215 
216  cp = strchr(locale, '.');
217  region = strchr(locale, '_');
218 
219  lstrcpynA(search.search_language, locale, MAX_ELEM_LEN);
220  if(region) {
221  lstrcpynA(search.search_country, region+1, MAX_ELEM_LEN);
222  if(region-locale < MAX_ELEM_LEN)
223  search.search_language[region-locale] = '\0';
224  } else
225  search.search_country[0] = '\0';
226 
227  if(cp) {
228  lstrcpynA(search.search_codepage, cp+1, MAX_ELEM_LEN);
229  if(region && cp-region-1<MAX_ELEM_LEN)
230  search.search_country[cp-region-1] = '\0';
231  if(cp-locale < MAX_ELEM_LEN)
232  search.search_language[cp-locale] = '\0';
233  } else
234  search.search_codepage[0] = '\0';
235 
236  if(!search.search_country[0] && !search.search_codepage[0])
237  remap_synonym(search.search_language);
238 
241  (LONG_PTR)&search);
242 
243  if (!search.match_flags)
244  return -1;
245 
246  /* If we were given something that didn't match, fail */
247  if (search.search_country[0] && !(search.match_flags & FOUND_COUNTRY))
248  return -1;
249 
250  lcid = MAKELCID(search.found_lang_id, SORT_DEFAULT);
251 
252  /* Populate partial locale, translating LCID to locale string elements */
253  if (!(search.match_flags & FOUND_CODEPAGE)) {
254  /* Even if a codepage is not enumerated for a locale
255  * it can be set if valid */
256  if (search.search_codepage[0]) {
257  if (IsValidCodePage(atoi(search.search_codepage)))
258  memcpy(search.found_codepage,search.search_codepage,MAX_ELEM_LEN);
259  else {
260  /* Special codepage values: OEM & ANSI */
261  if (!strcasecmp(search.search_codepage,"OCP")) {
263  search.found_codepage, MAX_ELEM_LEN);
264  } else if (!strcasecmp(search.search_codepage,"ACP")) {
266  search.found_codepage, MAX_ELEM_LEN);
267  } else
268  return -1;
269 
270  if (!atoi(search.found_codepage))
271  return -1;
272  }
273  } else {
274  /* Prefer ANSI codepages if present */
276  search.found_codepage, MAX_ELEM_LEN);
277  if (!search.found_codepage[0] || !atoi(search.found_codepage))
279  search.found_codepage, MAX_ELEM_LEN);
280  }
281  }
282  if (codepage)
283  *codepage = atoi(search.found_codepage);
284 
285  return lcid;
286 }
static short search(int val, const short *table, int size)
Definition: msg711.c:255
#define FOUND_COUNTRY
Definition: locale.c:104
#define LOCALE_IDEFAULTANSICODEPAGE
Definition: winnls.h:38
#define MAKELCID(lgid, srtid)
#define strcasecmp
Definition: fake.h:9
INT WINAPI GetLocaleInfoA(LCID lcid, LCTYPE lctype, LPSTR buffer, INT len)
Definition: lang.c:1018
#define MAX_ELEM_LEN
Definition: locale.c:27
DWORD LCID
Definition: nls.h:13
#define LOCALE_ILANGUAGE
Definition: winnls.h:25
char * LPSTR
Definition: xmlstorage.h:182
Definition: _locale.h:75
int codepage
Definition: win_iconv.c:156
static BOOL CALLBACK find_best_locale_proc(HMODULE hModule, LPCSTR type, LPCSTR name, WORD LangID, LONG_PTR lParam)
Definition: locale.c:141
const char * LPCSTR
Definition: xmlstorage.h:183
#define FOUND_CODEPAGE
Definition: locale.c:105
#define SORT_DEFAULT
BOOL WINAPI EnumResourceLanguagesA(HMODULE hmod, LPCSTR type, LPCSTR name, ENUMRESLANGPROCA lpfun, LONG_PTR lparam)
Definition: res.c:428
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
Definition: loader.c:821
#define RT_STRING
Definition: pedump.c:368
#define LOCALE_IDEFAULTCODEPAGE
Definition: winnls.h:37
static const wchar_t void * locale
Definition: printf.c:79
BOOL WINAPI IsValidCodePage(UINT CodePage)
Definition: nls.c:1479
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
int atoi(const char *)
#define lstrcpynA
Definition: compat.h:416
char * strchr(const char *String, int ch)
Definition: utclib.c:501
static void remap_synonym(char *name)
Definition: locale.c:88
POINT cp
Definition: magnifier.c:59
#define memset(x, y, z)
Definition: compat.h:39

Referenced by MSVCRT__create_locale().

Variable Documentation

◆ global_locale

MSVCRT__locale_t global_locale

Definition at line 1495 of file locale.c.

Referenced by __get_MSVCRT_locale(), __init_global_locale(), _setmbcp_l(), and DllMain().