Reactos
1/*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS system libraries
4 * FILE: dll/win32/kernel32/winnls/string/lstring.c
5 * PURPOSE: Local string functions
6 * PROGRAMMER: Ariadne ( ariadne@xs4all.nl)
7 * UPDATE HISTORY:
8 * Created 01/11/98
9 */
10
11#include <k32.h>
12
13/*
14 * @implemented
15 */
16int
17WINAPI
18lstrcmpA(LPCSTR lpString1, LPCSTR lpString2)
19{
20 int Result;
21
22 if (lpString1 == lpString2)
23 return 0;
24 if (lpString1 == NULL)
25 return -1;
26 if (lpString2 == NULL)
27 return 1;
28
29 Result = CompareStringA(GetThreadLocale(), 0, lpString1, -1, lpString2, -1);
30 if (Result)
31 Result -= 2;
32
33 return Result;
34}
35
36
37/*
38 * @implemented
39 */
40int
41WINAPI
42lstrcmpiA(LPCSTR lpString1, LPCSTR lpString2)
43{
44 int Result;
45
46 if (lpString1 == lpString2)
47 return 0;
48 if (lpString1 == NULL)
49 return -1;
50 if (lpString2 == NULL)
51 return 1;
52
53 Result = CompareStringA(GetThreadLocale(), NORM_IGNORECASE, lpString1, -1, lpString2, -1);
54 if (Result)
55 Result -= 2;
56
57 return Result;
58}
59
60
61/*
62 * @implemented
63 */
64LPSTR
65WINAPI
66lstrcpynA(LPSTR lpString1, LPCSTR lpString2, int iMaxLength)
67{
68 LPSTR d = lpString1;
69 LPCSTR s = lpString2;
70 UINT count = iMaxLength;
71 LPSTR Ret = NULL;
72
73 _SEH2_TRY
74 {
75 while ((count > 1) && *s)
76 {
77 count--;
78 *d++ = *s++;
79 }
80
81 if (count)
82 *d = 0;
83
84 Ret = lpString1;
85 }
86 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
87 {
88 }
89 _SEH2_END;
90
91 return Ret;
92}
93
94
95/*
96 * @implemented
97 */
98LPSTR
99WINAPI
100lstrcpyA(LPSTR lpString1, LPCSTR lpString2)
101{
102 LPSTR Ret = NULL;
103
104 _SEH2_TRY
105 {
106 memmove(lpString1, lpString2, strlen(lpString2) + 1);
107 Ret = lpString1;
108 }
109 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
110 {
111 }
112 _SEH2_END;
113
114 return Ret;
115}
116
117
118/*
119 * @implemented
120 */
121LPSTR
122WINAPI
123lstrcatA(LPSTR lpString1, LPCSTR lpString2)
124{
125 LPSTR Ret = NULL;
126
127 _SEH2_TRY
128 {
129 Ret = strcat(lpString1, lpString2);
130 }
131 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
132 {
133 }
134 _SEH2_END;
135
136 return Ret;
137}
138
139
140/*
141 * @implemented
142 */
143int
144WINAPI
145lstrlenA(LPCSTR lpString)
146{
147 INT Ret = 0;
148
149 if (lpString == NULL)
150 return 0;
151
152 _SEH2_TRY
153 {
154 Ret = strlen(lpString);
155 }
156 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
157 {
158 }
159 _SEH2_END;
160
161 return Ret;
162}
163
164
165/*
166 * @implemented
167 */
168int
169WINAPI
170lstrcmpW(LPCWSTR lpString1, LPCWSTR lpString2)
171{
172 int Result;
173
174 if (lpString1 == lpString2)
175 return 0;
176 if (lpString1 == NULL)
177 return -1;
178 if (lpString2 == NULL)
179 return 1;
180
181 Result = CompareStringW(GetThreadLocale(), 0, lpString1, -1, lpString2, -1);
182 if (Result)
183 Result -= 2;
184
185 return Result;
186}
187
188
189/*
190 * @implemented
191 */
192int
193WINAPI
194lstrcmpiW(LPCWSTR lpString1, LPCWSTR lpString2)
195{
196 int Result;
197
198 if (lpString1 == lpString2)
199 return 0;
200 if (lpString1 == NULL)
201 return -1;
202 if (lpString2 == NULL)
203 return 1;
204
205 Result = CompareStringW(GetThreadLocale(), NORM_IGNORECASE, lpString1, -1, lpString2, -1);
206 if (Result)
207 Result -= 2;
208
209 return Result;
210}
211
212
213/*
214 * @implemented
215 */
216LPWSTR
217WINAPI
218lstrcpynW(LPWSTR lpString1, LPCWSTR lpString2, int iMaxLength)
219{
220 LPWSTR d = lpString1;
221 LPCWSTR s = lpString2;
222 UINT count = iMaxLength;
223 LPWSTR Ret = NULL;
224
225 _SEH2_TRY
226 {
227 while ((count > 1) && *s)
228 {
229 count--;
230 *d++ = *s++;
231 }
232
233 if (count)
234 *d = 0;
235
236 Ret = lpString1;
237 }
238 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
239 {
240 }
241 _SEH2_END;
242
243 return Ret;
244}
245
246
247/*
248 * @implemented
249 */
250LPWSTR
251WINAPI
252lstrcpyW(LPWSTR lpString1, LPCWSTR lpString2)
253{
254 LPWSTR Ret = NULL;
255
256 _SEH2_TRY
257 {
258 Ret = wcscpy(lpString1, lpString2);
259 }
260 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
261 {
262 }
263 _SEH2_END;
264
265 return Ret;
266}
267
268
269/*
270 * @implemented
271 */
272LPWSTR
273WINAPI
274lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
275{
276 LPWSTR Ret = NULL;
277
278 _SEH2_TRY
279 {
280 Ret = wcscat(lpString1, lpString2);
281 }
282 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
283 {
284 }
285 _SEH2_END;
286
287 return Ret;
288}
289
290
291/*
292 * @implemented
293 */
294int
295WINAPI
296lstrlenW(LPCWSTR lpString)
297{
298 INT Ret = 0;
299
300 if (lpString == NULL)
301 return 0;
302
303 _SEH2_TRY
304 {
305 Ret = wcslen(lpString);
306 }
307 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
308 {
309 }
310 _SEH2_END;
311
312 return Ret;
313}