Synchronize with trunk r58457.
[reactos.git] / include / crt / string.h
1 /**
2 * This file has no copyright assigned and is placed in the Public Domain.
3 * This file is part of the w64 mingw-runtime package.
4 * No warranty is given; refer to the file DISCLAIMER within this package.
5 */
6 #ifndef _INC_STRING
7 #define _INC_STRING
8
9 #include <crtdefs.h>
10
11 #ifdef __cplusplus
12 extern "C" {
13 #endif
14
15 #ifndef _NLSCMP_DEFINED
16 #define _NLSCMP_DEFINED
17 #define _NLSCMPERROR 2147483647
18 #endif
19
20 #ifndef NULL
21 #ifdef __cplusplus
22 #define NULL 0
23 #else
24 #define NULL ((void *)0)
25 #endif
26 #endif
27
28 #ifndef _CRT_MEMORY_DEFINED
29 #define _CRT_MEMORY_DEFINED
30
31 _CRTIMP
32 void*
33 __cdecl
34 _memccpy(
35 _Out_writes_bytes_opt_(_MaxCount) void *_Dst,
36 _In_ const void *_Src,
37 _In_ int _Val,
38 _In_ size_t _MaxCount);
39
40 _Must_inspect_result_
41 _CRTIMP
42 _CONST_RETURN
43 void*
44 __cdecl
45 memchr(
46 _In_reads_bytes_opt_(_MaxCount) const void *_Buf,
47 _In_ int _Val,
48 _In_ size_t _MaxCount);
49
50 _Must_inspect_result_
51 _CRTIMP
52 int
53 __cdecl
54 _memicmp(
55 _In_reads_bytes_opt_(_Size) const void *_Buf1,
56 _In_reads_bytes_opt_(_Size) const void *_Buf2,
57 _In_ size_t _Size);
58
59 _Must_inspect_result_
60 _CRTIMP
61 int
62 __cdecl
63 _memicmp_l(
64 _In_reads_bytes_opt_(_Size) const void *_Buf1,
65 _In_reads_bytes_opt_(_Size) const void *_Buf2,
66 _In_ size_t _Size,
67 _In_opt_ _locale_t _Locale);
68
69 _Must_inspect_result_
70 int
71 __cdecl
72 memcmp(
73 _In_reads_bytes_(_Size) const void *_Buf1,
74 _In_reads_bytes_(_Size) const void *_Buf2,
75 _In_ size_t _Size);
76
77 _Post_equal_to_(_Dst)
78 _At_buffer_((unsigned char*)_Dst,
79 _Iter_,
80 _MaxCount,
81 _Post_satisfies_(((unsigned char*)_Dst)[_Iter_] == ((unsigned char*)_Src)[_Iter_]))
82 _CRT_INSECURE_DEPRECATE_MEMORY(memcpy_s)
83 void*
84 __cdecl
85 memcpy(
86 _Out_writes_bytes_all_(_MaxCount) void *_Dst,
87 _In_reads_bytes_(_MaxCount) const void *_Src,
88 _In_ size_t _MaxCount);
89
90 _Post_equal_to_(_Dst)
91 _At_buffer_((unsigned char*)_Dst,
92 _Iter_,
93 _Size,
94 _Post_satisfies_(((unsigned char*)_Dst)[_Iter_] == _Val))
95 void*
96 __cdecl
97 memset(
98 _Out_writes_bytes_all_(_Size) void *_Dst,
99 _In_ int _Val,
100 _In_ size_t _Size);
101
102 #ifndef NO_OLDNAMES
103
104 _CRTIMP
105 _CRT_NONSTDC_DEPRECATE(_memccpy)
106 void*
107 __cdecl
108 memccpy(
109 _Out_writes_bytes_opt_(_Size) void *_Dst,
110 _In_reads_bytes_opt_(_Size) const void *_Src,
111 _In_ int _Val,
112 _In_ size_t _Size);
113
114 _Check_return_
115 _CRTIMP
116 _CRT_NONSTDC_DEPRECATE(_memicmp)
117 int
118 __cdecl
119 memicmp(
120 _In_reads_bytes_opt_(_Size) const void *_Buf1,
121 _In_reads_bytes_opt_(_Size) const void *_Buf2,
122 _In_ size_t _Size);
123
124 #endif /* NO_OLDNAMES */
125
126 #endif /* _CRT_MEMORY_DEFINED */
127
128 char*
129 __cdecl
130 _strset(
131 _Inout_z_ char *_Str,
132 _In_ int _Val);
133
134 char*
135 __cdecl
136 strcpy(
137 _Out_writes_z_(_String_length_(_Source) + 1) char *_Dest,
138 _In_z_ const char *_Source);
139
140 char*
141 __cdecl
142 strcat(
143 _Inout_updates_z_(_String_length_(_Dest) + _String_length_(_Source) + 1) char *_Dest,
144 _In_z_ const char *_Source);
145
146 _Check_return_
147 int
148 __cdecl
149 strcmp(
150 _In_z_ const char *_Str1,
151 _In_z_ const char *_Str2);
152
153 size_t
154 __cdecl
155 strlen(
156 _In_z_ const char *_Str);
157
158 _When_(_MaxCount > _String_length_(_Str),
159 _Post_satisfies_(return == _String_length_(_Str)))
160 _When_(_MaxCount <= _String_length_(_Str),
161 _Post_satisfies_(return == _MaxCount))
162 _CRTIMP
163 size_t
164 __cdecl
165 strnlen(
166 _In_reads_or_z_(_MaxCount) const char *_Str,
167 _In_ size_t _MaxCount);
168
169 _CRT_INSECURE_DEPRECATE_MEMORY(memmove_s)
170 void*
171 __cdecl
172 memmove(
173 _Out_writes_bytes_all_opt_(_MaxCount) void *_Dst,
174 _In_reads_bytes_opt_(_MaxCount) const void *_Src,
175 _In_ size_t _MaxCount);
176
177 _Check_return_
178 _CRTIMP
179 char*
180 __cdecl
181 _strdup(
182 _In_opt_z_ const char *_Src);
183
184 _Check_return_
185 _CRTIMP
186 _CONST_RETURN
187 char*
188 __cdecl
189 strchr(
190 _In_z_ const char *_Str,
191 _In_ int _Val);
192
193 _Check_return_
194 _CRTIMP
195 int
196 __cdecl
197 _stricmp(
198 _In_z_ const char *_Str1,
199 _In_z_ const char *_Str2);
200
201 _Check_return_
202 _CRTIMP
203 int
204 __cdecl
205 _strcmpi(
206 _In_z_ const char *_Str1,
207 _In_z_ const char *_Str2);
208
209 _Check_return_
210 _CRTIMP
211 int
212 __cdecl
213 _stricmp_l(
214 _In_z_ const char *_Str1,
215 _In_z_ const char *_Str2,
216 _In_opt_ _locale_t _Locale);
217
218 _Check_return_
219 _CRTIMP
220 int
221 __cdecl
222 strcoll(
223 _In_z_ const char *_Str1,
224 _In_z_ const char *_Str2);
225
226 _Check_return_
227 _CRTIMP
228 int
229 __cdecl
230 _strcoll_l(
231 _In_z_ const char *_Str1,
232 _In_z_ const char *_Str2,
233 _In_opt_ _locale_t _Locale);
234
235 _Check_return_
236 _CRTIMP
237 int
238 __cdecl
239 _stricoll(
240 _In_z_ const char *_Str1,
241 _In_z_ const char *_Str2);
242
243 _Check_return_
244 _CRTIMP
245 int
246 __cdecl
247 _stricoll_l(
248 _In_z_ const char *_Str1,
249 _In_z_ const char *_Str2,
250 _In_opt_ _locale_t _Locale);
251
252 _Check_return_
253 _CRTIMP
254 int
255 __cdecl
256 _strncoll(
257 _In_z_ const char *_Str1,
258 _In_z_ const char *_Str2,
259 _In_ size_t _MaxCount);
260
261 _Check_return_
262 _CRTIMP
263 int
264 __cdecl
265 _strncoll_l(
266 _In_z_ const char *_Str1,
267 _In_z_ const char *_Str2,
268 _In_ size_t _MaxCount,
269 _In_opt_ _locale_t _Locale);
270
271 _Check_return_
272 _CRTIMP
273 int
274 __cdecl
275 _strnicoll(
276 _In_z_ const char *_Str1,
277 _In_z_ const char *_Str2,
278 _In_ size_t _MaxCount);
279
280 _Check_return_
281 _CRTIMP
282 int
283 __cdecl
284 _strnicoll_l(
285 _In_z_ const char *_Str1,
286 _In_z_ const char *_Str2,
287 _In_ size_t _MaxCount,
288 _In_opt_ _locale_t _Locale);
289
290 _Check_return_
291 _CRTIMP
292 size_t
293 __cdecl
294 strcspn(
295 _In_z_ const char *_Str,
296 _In_z_ const char *_Control);
297
298 _Check_return_
299 _CRTIMP
300 _CRT_INSECURE_DEPRECATE(_strerror_s)
301 char*
302 __cdecl
303 _strerror(
304 _In_opt_z_ const char *_ErrMsg);
305
306 _Check_return_
307 _CRTIMP
308 _CRT_INSECURE_DEPRECATE(strerror_s)
309 char*
310 __cdecl
311 strerror(
312 _In_ int);
313
314 _CRTIMP
315 char*
316 __cdecl
317 _strlwr(
318 _Inout_z_ char *_String);
319
320 char*
321 strlwr_l(
322 char *_String,
323 _locale_t _Locale);
324
325 char*
326 __cdecl
327 strncat(
328 char *_Dest,
329 const char *_Source,
330 size_t _Count);
331
332 _Check_return_
333 int
334 __cdecl
335 strncmp(
336 _In_reads_or_z_(_MaxCount) const char *_Str1,
337 _In_reads_or_z_(_MaxCount) const char *_Str2,
338 _In_ size_t _MaxCount);
339
340 _Check_return_
341 _CRTIMP
342 int
343 __cdecl
344 _strnicmp(
345 _In_reads_or_z_(_MaxCount) const char *_Str1,
346 _In_reads_or_z_(_MaxCount) const char *_Str2,
347 _In_ size_t _MaxCount);
348
349 _Check_return_
350 _CRTIMP
351 int
352 __cdecl
353 _strnicmp_l(
354 _In_reads_or_z_(_MaxCount) const char *_Str1,
355 _In_reads_or_z_(_MaxCount) const char *_Str2,
356 _In_ size_t _MaxCount,
357 _In_opt_ _locale_t _Locale);
358
359 char*
360 strncpy(
361 char *_Dest,
362 const char *_Source,
363 size_t _Count);
364
365 _CRTIMP
366 _CRT_INSECURE_DEPRECATE_CORE(_strnset_s)
367 char*
368 __cdecl
369 _strnset(
370 char *_Str,
371 int _Val,
372 size_t _MaxCount);
373
374 _Check_return_
375 _CRTIMP
376 _CONST_RETURN
377 char*
378 __cdecl
379 strpbrk(
380 _In_z_ const char *_Str,
381 _In_z_ const char *_Control);
382
383 _Check_return_
384 _CRTIMP
385 _CONST_RETURN
386 char*
387 __cdecl
388 strrchr(
389 _In_z_ const char *_Str,
390 _In_ int _Ch);
391
392 _CRTIMP
393 char*
394 __cdecl
395 _strrev(
396 _Inout_z_ char *_Str);
397
398 _Check_return_
399 _CRTIMP
400 size_t
401 __cdecl
402 strspn(
403 _In_z_ const char *_Str,
404 _In_z_ const char *_Control);
405
406 _Check_return_
407 _CRTIMP
408 _CONST_RETURN
409 char*
410 __cdecl
411 strstr(
412 _In_z_ const char *_Str,
413 _In_z_ const char *_SubStr);
414
415 _Check_return_
416 _CRTIMP
417 _CRT_INSECURE_DEPRECATE_CORE(strtok_s)
418 char*
419 __cdecl
420 strtok(
421 _Inout_opt_z_ char *_Str,
422 _In_z_ const char *_Delim);
423
424 _CRTIMP
425 char*
426 __cdecl
427 _strupr(
428 _Inout_z_ char *_String);
429
430 _CRTIMP
431 char*
432 _strupr_l(
433 char *_String,
434 _locale_t _Locale);
435
436 _Check_return_opt_
437 _CRTIMP
438 size_t
439 __cdecl
440 strxfrm(
441 _Out_writes_opt_(_MaxCount) _Post_maybez_ char *_Dst,
442 _In_z_ const char *_Src,
443 _In_ size_t _MaxCount);
444
445 _Check_return_opt_
446 _CRTIMP
447 size_t
448 __cdecl
449 _strxfrm_l(
450 _Out_writes_opt_(_MaxCount) _Post_maybez_ char *_Dst,
451 _In_z_ const char *_Src,
452 _In_ size_t _MaxCount,
453 _In_opt_ _locale_t _Locale);
454
455 #if __STDC_WANT_SECURE_LIB__
456
457 _Check_return_wat_
458 _CRTIMP
459 errno_t
460 __cdecl
461 _strset_s(
462 _Inout_updates_z_(_DstSize) char *_Dst,
463 _In_ size_t _DstSize,
464 _In_ int _Value);
465
466 _Check_return_wat_
467 _CRTIMP
468 errno_t
469 __cdecl
470 _strerror_s(
471 _Out_writes_z_(_SizeInBytes) char *_Buf,
472 _In_ size_t _SizeInBytes,
473 _In_opt_z_ const char *_ErrMsg);
474
475 _Check_return_wat_
476 _CRTIMP
477 errno_t
478 __cdecl
479 _strlwr_s(
480 _Inout_updates_z_(_Size) char *_Str,
481 _In_ size_t _Size);
482
483 _Check_return_wat_
484 _CRTIMP
485 errno_t
486 __cdecl
487 _strlwr_s_l(
488 _Inout_updates_z_(_Size) char *_Str,
489 _In_ size_t _Size,
490 _In_opt_ _locale_t _Locale);
491
492 _Check_return_wat_
493 _CRTIMP
494 errno_t
495 __cdecl
496 _strnset_s(
497 _Inout_updates_z_(_Size) char *_Str,
498 _In_ size_t _Size,
499 _In_ int _Val,
500 _In_ size_t _MaxCount);
501
502 _Check_return_wat_
503 _CRTIMP
504 errno_t
505 __cdecl
506 _strupr_s(
507 _Inout_updates_z_(_Size) char *_Str,
508 _In_ size_t _Size);
509
510 _Check_return_wat_
511 _CRTIMP
512 errno_t
513 __cdecl
514 _strupr_s_l(
515 _Inout_updates_z_(_Size) char *_Str,
516 _In_ size_t _Size,
517 _locale_t _Locale);
518
519 _Check_return_wat_
520 _CRTIMP
521 errno_t
522 __cdecl
523 strcpy_s(
524 _Out_writes_z_(_Size) char *_Dst,
525 _In_ size_t _Size,
526 _In_z_ const char *_Src);
527
528 _Check_return_wat_
529 _CRTIMP
530 errno_t
531 __cdecl
532 strcat_s(
533 _Inout_updates_z_(_Size) char *_Dst,
534 _In_ size_t _Size,
535 _In_z_ const char *_Src);
536
537 #endif /* __STDC_WANT_SECURE_LIB__ */
538
539 #ifndef NO_OLDNAMES
540
541 _Check_return_
542 _CRTIMP
543 _CRT_NONSTDC_DEPRECATE(_strdup)
544 char*
545 __cdecl
546 strdup(
547 _In_opt_z_ const char *_Src);
548
549 _Check_return_
550 _CRTIMP
551 _CRT_NONSTDC_DEPRECATE(_strcmpi)
552 int
553 __cdecl
554 strcmpi(
555 _In_z_ const char *_Str1,
556 _In_z_ const char *_Str2);
557
558 _Check_return_
559 _CRTIMP
560 _CRT_NONSTDC_DEPRECATE(_stricmp)
561 int
562 __cdecl
563 stricmp(
564 _In_z_ const char *_Str1,
565 _In_z_ const char *_Str2);
566
567 _CRTIMP
568 _CRT_NONSTDC_DEPRECATE(_strlwr)
569 char*
570 __cdecl
571 strlwr(
572 _Inout_z_ char *_Str);
573
574 _Check_return_
575 _CRTIMP
576 _CRT_NONSTDC_DEPRECATE(_strnicmp)
577 int
578 __cdecl
579 strnicmp(
580 _In_z_ const char *_Str1,
581 _In_z_ const char *_Str,
582 _In_ size_t _MaxCount);
583
584 // __CRT_INLINE int __cdecl strncasecmp (const char *__sz1, const char *__sz2, size_t __sizeMaxCompare) { return _strnicmp (__sz1, __sz2, __sizeMaxCompare); }
585 // __CRT_INLINE int __cdecl strcasecmp (const char *__sz1, const char *__sz2) { return _stricmp (__sz1, __sz2); }
586
587 _CRTIMP
588 _CRT_NONSTDC_DEPRECATE(_strnset)
589 char*
590 __cdecl
591 strnset(
592 _Inout_updates_z_(_MaxCount) char *_Str,
593 _In_ int _Val,
594 _In_ size_t _MaxCount);
595
596 _CRTIMP
597 _CRT_NONSTDC_DEPRECATE(_strrev)
598 char*
599 __cdecl
600 strrev(
601 _Inout_z_ char *_Str);
602
603 _CRTIMP
604 _CRT_NONSTDC_DEPRECATE(_strset)
605 char*
606 __cdecl
607 strset(
608 _Inout_z_ char *_Str,
609 _In_ int _Val);
610
611 _CRTIMP
612 _CRT_NONSTDC_DEPRECATE(_strupr)
613 char*
614 __cdecl
615 strupr(
616 _Inout_z_ char *_Str);
617
618 #endif /* NO_OLDNAMES */
619
620 #ifndef _WSTRING_DEFINED
621 #define _WSTRING_DEFINED
622
623 _Check_return_
624 _CRTIMP
625 wchar_t*
626 __cdecl
627 _wcsdup(
628 _In_z_ const wchar_t *_Str);
629
630 _CRTIMP
631 _CRT_INSECURE_DEPRECATE(wcsat_s)
632 wchar_t*
633 __cdecl
634 wcscat(
635 _Inout_updates_z_(_String_length_(_Dest) + _String_length_(_Source) + 1) wchar_t *_Dest,
636 _In_z_ const wchar_t *_Source);
637
638 _Check_return_
639 _When_(return != 0, _Ret_range_(_Str, _Str + _String_length_(_Str) - 1))
640 _CRTIMP
641 _CONST_RETURN
642 wchar_t*
643 __cdecl
644 wcschr(
645 _In_z_ const wchar_t *_Str,
646 wchar_t _Ch);
647
648 _Check_return_
649 _CRTIMP
650 int
651 __cdecl
652 wcscmp(
653 _In_z_ const wchar_t *_Str1,
654 _In_z_ const wchar_t *_Str2);
655
656 _CRTIMP
657 _CRT_INSECURE_DEPRECATE(wcscpy_s)
658 wchar_t*
659 __cdecl
660 wcscpy(
661 _Out_writes_z_(_String_length_(_Source) + 1) wchar_t *_Dest,
662 _In_z_ const wchar_t *_Source);
663
664 _Check_return_
665 _CRTIMP
666 size_t
667 __cdecl
668 wcscspn(
669 _In_z_ const wchar_t *_Str,
670 _In_z_ const wchar_t *_Control);
671
672 _CRTIMP
673 wchar_t*
674 wcsncat(
675 wchar_t *_Dest,
676 const wchar_t *_Source,
677 size_t _Count);
678
679 _Ret_range_(==,_String_length_(_Str))
680 _CRTIMP
681 size_t
682 __cdecl
683 wcslen(
684 _In_z_ const wchar_t *_Str);
685
686 _When_(_MaxCount > _String_length_(_Src),
687 _Post_satisfies_(return == _String_length_(_Src)))
688 _When_(_MaxCount <= _String_length_(_Src),
689 _Post_satisfies_(return == _MaxCount))
690 _CRTIMP
691 _CRT_INSECURE_DEPRECATE(wcsnlen_s)
692 size_t
693 __cdecl
694 wcsnlen(
695 _In_reads_or_z_(_MaxCount) const wchar_t *_Src,
696 _In_ size_t _MaxCount);
697
698 _Check_return_
699 _CRTIMP
700 int
701 __cdecl
702 wcsncmp(
703 _In_reads_or_z_(_MaxCount) const wchar_t *_Str1,
704 _In_reads_or_z_(_MaxCount) const wchar_t *_Str2,
705 _In_ size_t _MaxCount);
706
707 _CRTIMP
708 _CRT_INSECURE_DEPRECATE(wcsncpy_s)
709 wchar_t*
710 wcsncpy(
711 wchar_t *_Dest,
712 const wchar_t *_Source,
713 size_t _Count);
714
715 _Check_return_
716 _CRTIMP
717 _CONST_RETURN
718 wchar_t*
719 __cdecl
720 wcspbrk(
721 _In_z_ const wchar_t *_Str,
722 _In_z_ const wchar_t *_Control);
723
724 _Check_return_
725 _CRTIMP
726 _CONST_RETURN
727 wchar_t*
728 __cdecl
729 wcsrchr(
730 _In_z_ const wchar_t *_Str,
731 _In_ wchar_t _Ch);
732
733 _Check_return_
734 _CRTIMP
735 size_t
736 __cdecl
737 wcsspn(
738 _In_z_ const wchar_t *_Str,
739 _In_z_ const wchar_t *_Control);
740
741 _When_(return != 0,
742 _Ret_range_(_Str, _Str + _String_length_(_Str) - 1))
743 _CRTIMP
744 _CONST_RETURN
745 wchar_t*
746 __cdecl
747 wcsstr(
748 _In_z_ const wchar_t *_Str,
749 _In_z_ const wchar_t *_SubStr);
750
751 _Check_return_
752 _CRTIMP
753 _CRT_INSECURE_DEPRECATE_CORE(wcstok_s)
754 wchar_t*
755 __cdecl
756 wcstok(
757 _Inout_opt_z_ wchar_t *_Str,
758 _In_z_ const wchar_t *_Delim);
759
760 _Check_return_
761 _CRTIMP
762 _CRT_INSECURE_DEPRECATE(_wcserror_s)
763 wchar_t*
764 __cdecl
765 _wcserror(
766 _In_ int _ErrNum);
767
768 _Check_return_
769 _CRTIMP
770 _CRT_INSECURE_DEPRECATE(__wcserror_s)
771 wchar_t*
772 __cdecl
773 __wcserror(
774 _In_opt_z_ const wchar_t *_Str);
775
776 _Check_return_
777 _CRTIMP
778 int
779 __cdecl
780 _wcsicmp(
781 _In_z_ const wchar_t *_Str1,
782 _In_z_ const wchar_t *_Str2);
783
784 _Check_return_
785 _CRTIMP
786 int
787 __cdecl
788 _wcsicmp_l(
789 _In_z_ const wchar_t *_Str1,
790 _In_z_ const wchar_t *_Str2,
791 _In_opt_ _locale_t _Locale);
792
793 _Check_return_
794 _CRTIMP
795 int
796 __cdecl
797 _wcsnicmp(
798 _In_reads_or_z_(_MaxCount) const wchar_t *_Str1,
799 _In_reads_or_z_(_MaxCount) const wchar_t *_Str2,
800 _In_ size_t _MaxCount);
801
802 _Check_return_
803 _CRTIMP
804 int
805 __cdecl
806 _wcsnicmp_l(
807 _In_reads_or_z_(_MaxCount) const wchar_t *_Str1,
808 _In_reads_or_z_(_MaxCount) const wchar_t *_Str2,
809 _In_ size_t _MaxCount,
810 _In_opt_ _locale_t _Locale);
811
812 _CRTIMP
813 _CRT_INSECURE_DEPRECATE_CORE(_wcsnset_s)
814 wchar_t*
815 __cdecl
816 _wcsnset(
817 wchar_t *_Str,
818 wchar_t _Val,
819 size_t _MaxCount);
820
821 _CRTIMP
822 wchar_t*
823 __cdecl
824 _wcsrev(
825 _Inout_z_ wchar_t *_Str);
826
827 _CRTIMP
828 _CRT_INSECURE_DEPRECATE_CORE(_wcsset_s)
829 wchar_t*
830 __cdecl
831 _wcsset(
832 wchar_t *_Str,
833 wchar_t _Val);
834
835 _CRTIMP
836 wchar_t*
837 __cdecl
838 _wcslwr(
839 _Inout_z_ wchar_t *_String);
840
841 _CRTIMP
842 wchar_t*
843 _wcslwr_l(
844 wchar_t *_String,
845 _locale_t _Locale);
846
847 _CRTIMP
848 wchar_t*
849 __cdecl
850 _wcsupr(
851 _Inout_z_ wchar_t *_String);
852
853 _CRTIMP
854 wchar_t*
855 _wcsupr_l(
856 wchar_t *_String,
857 _locale_t _Locale);
858
859 _Check_return_opt_
860 _CRTIMP
861 size_t
862 __cdecl
863 wcsxfrm(
864 _Out_writes_opt_(_MaxCount) _Post_maybez_ wchar_t *_Dst,
865 _In_z_ const wchar_t *_Src,
866 _In_ size_t _MaxCount);
867
868 _Check_return_opt_
869 _CRTIMP
870 size_t
871 __cdecl
872 _wcsxfrm_l(
873 _Out_writes_opt_(_MaxCount) _Post_maybez_ wchar_t *_Dst,
874 _In_z_ const wchar_t *_Src,
875 _In_ size_t _MaxCount,
876 _In_opt_ _locale_t _Locale);
877
878 _Check_return_
879 _CRTIMP
880 int
881 __cdecl
882 wcscoll(
883 _In_z_ const wchar_t *_Str1,
884 _In_z_ const wchar_t *_Str2);
885
886 _Check_return_
887 _CRTIMP
888 int
889 __cdecl
890 _wcscoll_l(
891 _In_z_ const wchar_t *_Str1,
892 _In_z_ const wchar_t *_Str2,
893 _In_opt_ _locale_t _Locale);
894
895 _Check_return_
896 _CRTIMP
897 int
898 __cdecl
899 _wcsicoll(
900 _In_z_ const wchar_t *_Str1,
901 _In_z_ const wchar_t *_Str2);
902
903 _Check_return_
904 _CRTIMP
905 int
906 __cdecl
907 _wcsicoll_l(
908 _In_z_ const wchar_t *_Str1,
909 _In_z_ const wchar_t *_Str2,
910 _In_opt_ _locale_t _Locale);
911
912 _Check_return_
913 _CRTIMP
914 int
915 __cdecl
916 _wcsncoll(
917 _In_z_ const wchar_t *_Str1,
918 _In_z_ const wchar_t *_Str2,
919 _In_ size_t _MaxCount);
920
921 _Check_return_
922 _CRTIMP
923 int
924 __cdecl
925 _wcsncoll_l(
926 _In_z_ const wchar_t *_Str1,
927 _In_z_ const wchar_t *_Str2,
928 _In_ size_t _MaxCount,
929 _In_opt_ _locale_t _Locale);
930
931 _Check_return_
932 _CRTIMP
933 int
934 __cdecl
935 _wcsnicoll(
936 _In_z_ const wchar_t *_Str1,
937 _In_z_ const wchar_t *_Str2,
938 _In_ size_t _MaxCount);
939
940 _Check_return_
941 _CRTIMP
942 int
943 __cdecl
944 _wcsnicoll_l(
945 _In_z_ const wchar_t *_Str1,
946 _In_z_ const wchar_t *_Str2,
947 _In_ size_t _MaxCount,
948 _In_opt_ _locale_t _Locale);
949
950 #if __STDC_WANT_SECURE_LIB__
951
952 _CRTIMP
953 errno_t
954 __cdecl
955 wcsat_s(
956 wchar_t *Dest,
957 size_t SizeInWords,
958 const wchar_t *_Source);
959
960 _Check_return_wat_
961 _CRTIMP
962 errno_t
963 __cdecl
964 wcscpy_s(
965 _Out_writes_z_(SizeInWords) wchar_t *Dest,
966 _In_ size_t SizeInWords,
967 _In_z_ const wchar_t *_Source);
968
969 _CRTIMP
970 errno_t
971 __cdecl
972 wcsnlen_s(
973 wchar_t **_Src,
974 size_t _MaxCount);
975
976 _Check_return_wat_
977 _CRTIMP
978 errno_t
979 __cdecl
980 wcsncpy_s(
981 _Out_writes_z_(SizeInWords) wchar_t *_Dest,
982 _In_ size_t SizeInWords,
983 _In_z_ const wchar_t *_Source,
984 _In_ size_t _Count);
985
986 _Check_return_wat_
987 _CRTIMP
988 errno_t
989 __cdecl
990 _wcserror_s(
991 _Out_writes_opt_z_(_SizeInWords) wchar_t *_Buf,
992 _In_ size_t _SizeInWords,
993 _In_ int _ErrNum);
994
995 _Check_return_wat_
996 _CRTIMP
997 errno_t
998 __cdecl
999 __wcserror_s(
1000 _Out_writes_opt_z_(_SizeInWords) wchar_t *_Buffer,
1001 _In_ size_t _SizeInWords,
1002 _In_z_ const wchar_t *_ErrMsg);
1003
1004 _Check_return_wat_
1005 _CRTIMP
1006 errno_t
1007 __cdecl
1008 _wcsnset_s(
1009 _Inout_updates_z_(_DstSizeInWords) wchar_t *_Dst,
1010 _In_ size_t _DstSizeInWords,
1011 _In_ wchar_t _Val,
1012 _In_ size_t _MaxCount);
1013
1014 _Check_return_wat_
1015 _CRTIMP
1016 errno_t
1017 __cdecl
1018 _wcsset_s(
1019 _Inout_updates_z_(_SizeInWords) wchar_t *_Str,
1020 _In_ size_t _SizeInWords,
1021 _In_ wchar_t _Val);
1022
1023 _Check_return_wat_
1024 _CRTIMP
1025 errno_t
1026 __cdecl
1027 _wcslwr_s(
1028 _Inout_updates_z_(_SizeInWords) wchar_t *_Str,
1029 _In_ size_t _SizeInWords);
1030
1031 _Check_return_wat_
1032 _CRTIMP
1033 errno_t
1034 __cdecl
1035 _wcslwr_s_l(
1036 _Inout_updates_z_(_SizeInWords) wchar_t *_Str,
1037 _In_ size_t _SizeInWords,
1038 _In_opt_ _locale_t _Locale);
1039
1040 _Check_return_wat_
1041 _CRTIMP
1042 errno_t
1043 __cdecl
1044 _wcsupr_s(
1045 _Inout_updates_z_(_Size) wchar_t *_Str,
1046 _In_ size_t _Size);
1047
1048 _Check_return_wat_
1049 _CRTIMP
1050 errno_t
1051 __cdecl
1052 _wcsupr_s_l(
1053 _Inout_updates_z_(_Size) wchar_t *_Str,
1054 _In_ size_t _Size,
1055 _In_opt_ _locale_t _Locale);
1056
1057 #endif /* __STDC_WANT_SECURE_LIB__ */
1058
1059 #ifndef NO_OLDNAMES
1060
1061 _Check_return_
1062 _CRTIMP
1063 _CRT_NONSTDC_DEPRECATE(_wcsdup)
1064 wchar_t*
1065 __cdecl
1066 wcsdup(
1067 _In_z_ const wchar_t *_Str);
1068
1069 #define wcswcs wcsstr
1070
1071 _Check_return_
1072 _CRTIMP
1073 _CRT_NONSTDC_DEPRECATE(_wcsicmp)
1074 int
1075 __cdecl
1076 wcsicmp(
1077 _In_z_ const wchar_t *_Str1,
1078 _In_z_ const wchar_t *_Str2);
1079
1080 _Check_return_
1081 _CRTIMP
1082 _CRT_NONSTDC_DEPRECATE(_wcsnicmp)
1083 int
1084 __cdecl
1085 wcsnicmp(
1086 _In_reads_or_z_(_MaxCount) const wchar_t *_Str1,
1087 _In_reads_or_z_(_MaxCount) const wchar_t *_Str2,
1088 _In_ size_t _MaxCount);
1089
1090 _CRTIMP
1091 _CRT_NONSTDC_DEPRECATE(_wcsnset)
1092 wchar_t*
1093 __cdecl
1094 wcsnset(
1095 _Inout_updates_z_(_MaxCount) wchar_t *_Str,
1096 _In_ wchar_t _Val,
1097 _In_ size_t _MaxCount);
1098
1099 _CRTIMP
1100 _CRT_NONSTDC_DEPRECATE(_wcsrev)
1101 wchar_t*
1102 __cdecl
1103 wcsrev(
1104 _Inout_z_ wchar_t *_Str);
1105
1106 _CRTIMP
1107 _CRT_NONSTDC_DEPRECATE(_wcsset)
1108 wchar_t*
1109 __cdecl
1110 wcsset(
1111 _Inout_z_ wchar_t *_Str,
1112 wchar_t _Val);
1113
1114 _CRTIMP
1115 _CRT_NONSTDC_DEPRECATE(_wcslwr)
1116 wchar_t*
1117 __cdecl
1118 wcslwr(
1119 _Inout_z_ wchar_t *_Str);
1120
1121 _CRTIMP
1122 _CRT_NONSTDC_DEPRECATE(_wcsupr)
1123 wchar_t*
1124 __cdecl
1125 wcsupr(
1126 _Inout_z_ wchar_t *_Str);
1127
1128 _Check_return_
1129 _CRTIMP
1130 _CRT_NONSTDC_DEPRECATE(_wcsicoll)
1131 int
1132 __cdecl
1133 wcsicoll(
1134 _In_z_ const wchar_t *_Str1,
1135 _In_z_ const wchar_t *_Str2);
1136
1137 #endif /* NO_OLDNAMES */
1138
1139 #endif /* !_WSTRING_DEFINED */
1140
1141 #ifdef __cplusplus
1142 }
1143 #endif
1144
1145 // HACK
1146 #define strcasecmp _stricmp
1147 #define strncasecmp _strnicmp
1148 #define stricmp _stricmp
1149 #define wcsicmp _wcsicmp
1150
1151 #endif
1152