Reactos
at master 313 lines 4.6 kB view raw
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}