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