51{
52
53
54
55
56
57 if (cchCount1 > 0)
58 cchCount1 =
static_cast<int>(
__strncnt(lpString1, cchCount1));
59 else if (cchCount1 < -1)
61
62 if (cchCount2 > 0)
63 cchCount2 =
static_cast<int>(
__strncnt(lpString2, cchCount2));
64 else if (cchCount2 < -1)
66
67
68 int buff_size1;
69 int buff_size2;
70
71
72
73
74
77
78
79
80
81
82 if (!cchCount1 || !cchCount2)
83 {
86
87
88 if (cchCount1 == cchCount2)
89 return 2;
90
91
92 if (cchCount2 > 1)
93 return 1;
94
95
96 if (cchCount1 > 1)
97 return 3;
98
99
100
101
102
103
104
106 return 0;
107
108 _ASSERTE(cchCount1==0 && cchCount2==1 || cchCount1==1 && cchCount2==0);
109
110
111 if (cchCount1 > 0)
112 {
114 return 3;
115
119 if ( (*(
unsigned char *)lpString1 >=
cp[0]) &&
120 (*(
unsigned char *)lpString1 <=
cp[1]) )
121 return 2;
122
123 return 3;
124 }
125
126
127 if (cchCount2 > 0)
128 {
130 return 1;
131
135 if ( (*(
unsigned char *)lpString2 >=
cp[0]) &&
136 (*(
unsigned char *)lpString2 <=
cp[1]) )
137 return 2;
138
139 return 1;
140 }
141 }
142
143
144
145
146
147
148 if ( 0 == (buff_size1 = __acrt_MultiByteToWideChar(
code_page,
151 lpString1,
152 cchCount1,
153 nullptr,
154 0 )) )
155 return 0;
156
157
158 __crt_scoped_stack_ptr<wchar_t> wbuffer1(_malloca_crt_t(wchar_t, buff_size1));
159 if (wbuffer1.get() == nullptr)
160 return 0;
161
162
163 if ( 0 == __acrt_MultiByteToWideChar(
code_page,
165 lpString1,
166 cchCount1,
167 wbuffer1.get(),
168 buff_size1 ) )
169 return 0;
170
171
172 if ( 0 == (buff_size2 = __acrt_MultiByteToWideChar(
code_page,
175 lpString2,
176 cchCount2,
177 nullptr,
178 0 )) )
179 return 0;
180
181
182 __crt_scoped_stack_ptr<wchar_t> const wbuffer2(_malloca_crt_t(wchar_t, buff_size2));
183 if (wbuffer2.get() == nullptr)
184 return 0;
185
186 int const actual_size = __acrt_MultiByteToWideChar(
189 lpString2,
190 cchCount2,
191 wbuffer2.get(),
192 buff_size2);
193
194 if (actual_size == 0)
195 return 0;
196
199 dwCmpFlags,
200 wbuffer1.get(),
201 buff_size1,
202 wbuffer2.get(),
203 buff_size2,
204 nullptr,
205 nullptr,
206 0);
207}
static _In_ LPCWSTR LocaleName
int WINAPI __acrt_CompareStringEx(_In_opt_ LPCWSTR locale_name, _In_ DWORD flags, _In_NLS_string_(string1_count) LPCWCH string1, _In_ int string1_count, _In_NLS_string_(string2_count) LPCWCH string2, _In_ int string2_count, _Reserved_ LPNLSVERSIONINFO version, _Reserved_ LPVOID reserved, _Reserved_ LPARAM param)
BOOL WINAPI GetCPInfo(UINT codepage, LPCPINFO cpinfo)
#define MB_ERR_INVALID_CHARS
_CRTIMP size_t __cdecl __strncnt(const char *_Str, size_t _Cnt)
BYTE LeadByte[MAX_LEADBYTES]