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