Sync with trunk.
[reactos.git] / include / crt / sec_api / wchar_s.h
index 5ce967b..9788be5 100644 (file)
@@ -3,6 +3,7 @@
  * This file is part of the w64 mingw-runtime package.
  * No warranty is given; refer to the file DISCLAIMER within this package.
  */
+
 #ifndef _INC_WCHAR_S
 #define _INC_WCHAR_S
 
@@ -16,100 +17,648 @@ extern "C" {
 
 #ifndef _WIO_S_DEFINED
 #define _WIO_S_DEFINED
-  _CRTIMP errno_t __cdecl _waccess_s(const wchar_t *_Filename,int _AccessMode);
-  _CRTIMP errno_t __cdecl _wmktemp_s(wchar_t *_TemplateName,size_t _SizeInWords);
-#endif
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  _waccess_s(
+    _In_z_ const wchar_t *_Filename,
+    _In_ int _AccessMode);
+
+  _CRTIMP
+  errno_t
+  __cdecl
+  _wmktemp_s(
+    _Inout_updates_z_(_SizeInWords) wchar_t *_TemplateName,
+    _In_ size_t _SizeInWords);
+
+#endif /* _WIO_S_DEFINED */
 
 #ifndef _WCONIO_S_DEFINED
 #define _WCONIO_S_DEFINED
-  _CRTIMP errno_t __cdecl _cgetws_s(wchar_t *_Buffer,size_t _SizeInWords,size_t *_SizeRead);
-  _CRTIMP int __cdecl _cwprintf_s(const wchar_t *_Format,...);
-  _CRTIMP int __cdecl _cwscanf_s(const wchar_t *_Format,...);
-  _CRTIMP int __cdecl _cwscanf_s_l(const wchar_t *_Format,_locale_t _Locale,...);
-  _CRTIMP int __cdecl _vcwprintf_s(const wchar_t *_Format,va_list _ArgList);
-  _CRTIMP int __cdecl _cwprintf_s_l(const wchar_t *_Format,_locale_t _Locale,...);
-  _CRTIMP int __cdecl _vcwprintf_s_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
-#endif
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  _cgetws_s(
+    _Out_writes_to_(_SizeInWords, *_SizeRead) wchar_t *_Buffer,
+    _In_ size_t _SizeInWords,
+    _Out_ size_t *_SizeRead);
+
+  _Check_return_opt_
+  _CRTIMP
+  int
+  __cdecl
+  _cwprintf_s(
+    _In_z_ _Printf_format_string_ const wchar_t *_Format,
+    ...);
+
+  _Check_return_opt_
+  _CRTIMP
+  int
+  __cdecl
+  _cwscanf_s(
+    _In_z_ _Scanf_s_format_string_ const wchar_t *_Format,
+    ...);
+
+  _Check_return_opt_
+  _CRTIMP
+  int
+  __cdecl
+  _cwscanf_s_l(
+    _In_z_ _Scanf_s_format_string_ const wchar_t *_Format,
+    _In_opt_ _locale_t _Locale,
+    ...);
+
+  _Check_return_opt_
+  _CRTIMP
+  int
+  __cdecl
+  _vcwprintf_s(
+    _In_z_ _Printf_format_string_ const wchar_t *_Format,
+    va_list _ArgList);
+
+  _CRTIMP
+  int
+  __cdecl
+  _cwprintf_s_l(
+    _In_z_ _Printf_format_string_ const wchar_t *_Format,
+    _In_opt_ _locale_t _Locale,
+    ...);
+
+  _CRTIMP
+  int
+  __cdecl
+  _vcwprintf_s_l(
+    _In_z_ _Printf_format_string_ const wchar_t *_Format,
+    _In_opt_ _locale_t _Locale,
+    va_list _ArgList);
+
+#endif /* _WCONIO_S_DEFINED */
 
 #ifndef _WSTDIO_S_DEFINED
 #define _WSTDIO_S_DEFINED
-  _CRTIMP wchar_t *__cdecl _getws_s(wchar_t *_Str,size_t _SizeInWords);
-  int __cdecl fwprintf_s(FILE *_File,const wchar_t *_Format,...);
-  int __cdecl wprintf_s(const wchar_t *_Format,...);
-  int __cdecl vfwprintf_s(FILE *_File,const wchar_t *_Format,va_list _ArgList);
-  int __cdecl vwprintf_s(const wchar_t *_Format,va_list _ArgList);
-  int __cdecl swprintf_s(wchar_t *_Dst,size_t _SizeInWords,const wchar_t *_Format,...);
-  int __cdecl vswprintf_s(wchar_t *_Dst,size_t _SizeInWords,const wchar_t *_Format,va_list _ArgList);
-  _CRTIMP int __cdecl _snwprintf_s(wchar_t *_DstBuf,size_t _DstSizeInWords,size_t _MaxCount,const wchar_t *_Format,...);
-  _CRTIMP int __cdecl _vsnwprintf_s(wchar_t *_DstBuf,size_t _DstSizeInWords,size_t _MaxCount,const wchar_t *_Format,va_list _ArgList);
-  _CRTIMP int __cdecl _wprintf_s_l(const wchar_t *_Format,_locale_t _Locale,...);
-  _CRTIMP int __cdecl _vwprintf_s_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
-  _CRTIMP int __cdecl _fwprintf_s_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,...);
-  _CRTIMP int __cdecl _vfwprintf_s_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
-  _CRTIMP int __cdecl _swprintf_s_l(wchar_t *_DstBuf,size_t _DstSize,const wchar_t *_Format,_locale_t _Locale,...);
-  _CRTIMP int __cdecl _vswprintf_s_l(wchar_t *_DstBuf,size_t _DstSize,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
-  _CRTIMP int __cdecl _snwprintf_s_l(wchar_t *_DstBuf,size_t _DstSize,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,...);
-  _CRTIMP int __cdecl _vsnwprintf_s_l(wchar_t *_DstBuf,size_t _DstSize,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
-  _CRTIMP int __cdecl _fwscanf_s_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,...);
-  _CRTIMP int __cdecl _swscanf_s_l(const wchar_t *_Src,const wchar_t *_Format,_locale_t _Locale,...);
-  _CRTIMP int __cdecl _snwscanf_s(const wchar_t *_Src,size_t _MaxCount,const wchar_t *_Format,...);
-  _CRTIMP int __cdecl _snwscanf_s_l(const wchar_t *_Src,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,...);
-  _CRTIMP int __cdecl _wscanf_s_l(const wchar_t *_Format,_locale_t _Locale,...);
-  _CRTIMP errno_t __cdecl _wfopen_s(FILE **_File,const wchar_t *_Filename,const wchar_t *_Mode);
-  _CRTIMP errno_t __cdecl _wfreopen_s(FILE **_File,const wchar_t *_Filename,const wchar_t *_Mode,FILE *_OldFile);
-  _CRTIMP errno_t __cdecl _wtmpnam_s(wchar_t *_DstBuf,size_t _SizeInWords);
-#endif
+
+  _Check_return_opt_
+  _CRTIMP
+  wchar_t *
+  __cdecl
+  _getws_s(
+    _Out_writes_z_(_SizeInWords) wchar_t *_Str,
+    _In_ size_t _SizeInWords);
+
+  _Check_return_opt_
+  int
+  __cdecl
+  fwprintf_s(
+    _Inout_ FILE *_File,
+    _In_z_ _Printf_format_string_ const wchar_t *_Format,
+    ...);
+
+  _Check_return_opt_
+  int
+  __cdecl
+  wprintf_s(
+    _In_z_ _Printf_format_string_ const wchar_t *_Format,
+    ...);
+
+  _Check_return_opt_
+  int
+  __cdecl
+  vfwprintf_s(
+    _Inout_ FILE *_File,
+    _In_z_ _Printf_format_string_ const wchar_t *_Format,
+    va_list _ArgList);
+
+  _Check_return_opt_
+  int
+  __cdecl
+  vwprintf_s(
+    _In_z_ _Printf_format_string_ const wchar_t *_Format,
+    va_list _ArgList);
+
+  int
+  __cdecl
+  swprintf_s(
+    _Out_writes_z_(_SizeInWords) wchar_t *_Dst,
+    _In_ size_t _SizeInWords,
+    _In_z_ _Printf_format_string_ const wchar_t *_Format,
+    ...);
+
+  int
+  __cdecl
+  vswprintf_s(
+    _Out_writes_z_(_SizeInWords) wchar_t *_Dst,
+    _In_ size_t _SizeInWords,
+    _In_z_ _Printf_format_string_ const wchar_t *_Format,
+    va_list _ArgList);
+
+  _Check_return_opt_
+  _CRTIMP
+  int
+  __cdecl
+  _snwprintf_s(
+    _Out_writes_z_(_DstSizeInWords) wchar_t *_DstBuf,
+    _In_ size_t _DstSizeInWords,
+    _In_ size_t _MaxCount,
+    _In_z_ _Printf_format_string_ const wchar_t *_Format,
+    ...);
+
+  _Check_return_opt_
+  _CRTIMP
+  int
+  __cdecl
+  _vsnwprintf_s(
+    _Out_writes_z_(_DstSizeInWords) wchar_t *_DstBuf,
+    _In_ size_t _DstSizeInWords,
+    _In_ size_t _MaxCount,
+    _In_z_ _Printf_format_string_ const wchar_t *_Format,
+    va_list _ArgList);
+
+  _Check_return_opt_
+  _CRTIMP
+  int
+  __cdecl
+  _wprintf_s_l(
+    _In_z_ _Printf_format_string_ const wchar_t *_Format,
+    _In_opt_ _locale_t _Locale,
+    ...);
+
+  _Check_return_opt_
+  _CRTIMP
+  int
+  __cdecl
+  _vwprintf_s_l(
+    _In_z_ _Printf_format_string_ const wchar_t *_Format,
+    _In_opt_ _locale_t _Locale,
+    va_list _ArgList);
+
+  _Check_return_opt_
+  _CRTIMP
+  int
+  __cdecl
+  _fwprintf_s_l(
+    _Inout_ FILE *_File,
+    _In_z_ _Printf_format_string_ const wchar_t *_Format,
+    _In_opt_ _locale_t _Locale,
+    ...);
+
+  _Check_return_opt_
+  _CRTIMP
+  int
+  __cdecl
+  _vfwprintf_s_l(
+    _Inout_ FILE *_File,
+    _In_z_ _Printf_format_string_ const wchar_t *_Format,
+    _In_opt_ _locale_t _Locale,
+    va_list _ArgList);
+
+  _Check_return_opt_
+  _CRTIMP
+  int
+  __cdecl
+  _swprintf_s_l(
+    _Out_writes_z_(_DstSize) wchar_t *_DstBuf,
+    _In_ size_t _DstSize,
+    _In_z_ _Printf_format_string_ const wchar_t *_Format,
+    _In_opt_ _locale_t _Locale,
+    ...);
+
+  _Check_return_opt_
+  _CRTIMP
+  int
+  __cdecl
+  _vswprintf_s_l(
+    _Out_writes_z_(_DstSize) wchar_t *_DstBuf,
+    _In_ size_t _DstSize,
+    _In_z_ _Printf_format_string_ const wchar_t *_Format,
+    _In_opt_ _locale_t _Locale,
+    va_list _ArgList);
+
+  _Check_return_opt_
+  _CRTIMP
+  int
+  __cdecl
+  _snwprintf_s_l(
+    _Out_writes_z_(_DstSize) wchar_t *_DstBuf,
+    _In_ size_t _DstSize,
+    _In_ size_t _MaxCount,
+    _In_z_ _Printf_format_string_ const wchar_t *_Format,
+    _In_opt_ _locale_t _Locale,
+    ...);
+
+  _Check_return_opt_
+  _CRTIMP
+  int
+  __cdecl
+  _vsnwprintf_s_l(
+    _Out_writes_z_(_DstSize) wchar_t *_DstBuf,
+    _In_ size_t _DstSize,
+    _In_ size_t _MaxCount,
+    _In_z_ _Printf_format_string_ const wchar_t *_Format,
+    _In_opt_ _locale_t _Locale,
+    va_list _ArgList);
+
+  _Check_return_opt_
+  _CRTIMP
+  int
+  __cdecl
+  _fwscanf_s_l(
+    _Inout_ FILE *_File,
+    _In_z_ _Scanf_s_format_string_ const wchar_t *_Format,
+    _In_opt_ _locale_t _Locale,
+    ...);
+
+  _Check_return_opt_
+  _CRTIMP
+  int
+  __cdecl
+  _swscanf_s_l(
+    _In_z_ const wchar_t *_Src,
+    _In_z_ _Scanf_s_format_string_ const wchar_t *_Format,
+    _In_opt_ _locale_t _Locale,
+    ...);
+
+  _Check_return_opt_
+  _CRTIMP
+  int
+  __cdecl
+  _snwscanf_s(
+    _In_reads_(_MaxCount) _Pre_z_ const wchar_t *_Src,
+    _In_ size_t _MaxCount,
+    _In_z_ _Scanf_s_format_string_ const wchar_t *_Format,
+    ...);
+
+  _Check_return_opt_
+  _CRTIMP
+  int
+  __cdecl
+  _snwscanf_s_l(
+    _In_reads_(_MaxCount) _Pre_z_ const wchar_t *_Src,
+    _In_ size_t _MaxCount,
+    _In_z_ _Scanf_s_format_string_ const wchar_t *_Format,
+    _In_opt_ _locale_t _Locale,
+    ...);
+
+  _Check_return_opt_
+  _CRTIMP
+  int
+  __cdecl
+  _wscanf_s_l(
+    _In_z_ _Scanf_s_format_string_ const wchar_t *_Format,
+    _In_opt_ _locale_t _Locale,
+    ...);
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  _wfopen_s(
+    _Outptr_result_maybenull_ FILE **_File,
+    _In_z_ const wchar_t *_Filename,
+    _In_z_ const wchar_t *_Mode);
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  _wfreopen_s(
+    _Outptr_result_maybenull_ FILE **_File,
+    _In_z_ const wchar_t *_Filename,
+    _In_z_ const wchar_t *_Mode,
+    _Inout_ FILE *_OldFile);
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  _wtmpnam_s(
+    _Out_writes_z_(_SizeInWords) wchar_t *_DstBuf,
+    _In_ size_t _SizeInWords);
+
+#endif /* _WSTDIO_S_DEFINED */
 
 #ifndef _WSTDLIB_S_DEFINED
 #define _WSTDLIB_S_DEFINED
-  _CRTIMP errno_t __cdecl _itow_s (int _Val,wchar_t *_DstBuf,size_t _SizeInWords,int _Radix);
-  _CRTIMP errno_t __cdecl _ltow_s (long _Val,wchar_t *_DstBuf,size_t _SizeInWords,int _Radix);
-  _CRTIMP errno_t __cdecl _ultow_s (unsigned long _Val,wchar_t *_DstBuf,size_t _SizeInWords,int _Radix);
-  _CRTIMP errno_t __cdecl _wgetenv_s(size_t *_ReturnSize,wchar_t *_DstBuf,size_t _DstSizeInWords,const wchar_t *_VarName);
-  _CRTIMP errno_t __cdecl _wdupenv_s(wchar_t **_Buffer,size_t *_BufferSizeInWords,const wchar_t *_VarName);
-  _CRTIMP errno_t __cdecl _i64tow_s(__int64 _Val,wchar_t *_DstBuf,size_t _SizeInWords,int _Radix);
-  _CRTIMP errno_t __cdecl _ui64tow_s(unsigned __int64 _Val,wchar_t *_DstBuf,size_t _SizeInWords,int _Radix);
-#endif
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  _itow_s(
+    _In_ int _Val,
+    _Out_writes_z_(_SizeInWords) wchar_t *_DstBuf,
+    _In_ size_t _SizeInWords,
+    _In_ int _Radix);
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  _ltow_s(
+    _In_ long _Val,
+    _Out_writes_z_(_SizeInWords) wchar_t *_DstBuf,
+    _In_ size_t _SizeInWords,
+    _In_ int _Radix);
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  _ultow_s(
+    _In_ unsigned long _Val,
+    _Out_writes_z_(_SizeInWords) wchar_t *_DstBuf,
+    _In_ size_t _SizeInWords,
+    _In_ int _Radix);
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  _wgetenv_s(
+    _Out_ size_t *_ReturnSize,
+    _Out_writes_z_(_DstSizeInWords) wchar_t *_DstBuf,
+    _In_ size_t _DstSizeInWords,
+    _In_z_ const wchar_t *_VarName);
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  _wdupenv_s(
+    _Outptr_result_buffer_maybenull_(*_BufferSizeInWords) _Deref_post_z_ wchar_t **_Buffer,
+    _Out_opt_ size_t *_BufferSizeInWords,
+    _In_z_ const wchar_t *_VarName);
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  _i64tow_s(
+    _In_ __int64 _Val,
+    _Out_writes_z_(_SizeInWords) wchar_t *_DstBuf,
+    _In_ size_t _SizeInWords,
+    _In_ int _Radix);
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  _ui64tow_s(
+    _In_ unsigned __int64 _Val,
+    _Out_writes_z_(_SizeInWords) wchar_t *_DstBuf,
+    _In_ size_t _SizeInWords,
+    _In_ int _Radix);
+
+#endif /* _WSTDLIB_S_DEFINED */
 
 #ifndef _POSIX_
 #ifndef _WSTDLIBP_S_DEFINED
 #define _WSTDLIBP_S_DEFINED
-  _CRTIMP errno_t __cdecl _wmakepath_s(wchar_t *_PathResult,size_t _SizeInWords,const wchar_t *_Drive,const wchar_t *_Dir,const wchar_t *_Filename,const wchar_t *_Ext);
-  _CRTIMP errno_t __cdecl _wputenv_s(const wchar_t *_Name,const wchar_t *_Value);
-  _CRTIMP errno_t __cdecl _wsearchenv_s(const wchar_t *_Filename,const wchar_t *_EnvVar,wchar_t *_ResultPath,size_t _SizeInWords);
-  _CRTIMP errno_t __cdecl _wsplitpath_s(const wchar_t *_FullPath,wchar_t *_Drive,size_t _DriveSizeInWords,wchar_t *_Dir,size_t _DirSizeInWords,wchar_t *_Filename,size_t _FilenameSizeInWords,wchar_t *_Ext,size_t _ExtSizeInWords);
-#endif
-#endif
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  _wmakepath_s(
+    _Out_writes_z_(_SizeInBytes) wchar_t *_PathResult,
+    _In_ size_t _SizeInWords,
+    _In_opt_z_ const wchar_t *_Drive,
+    _In_opt_z_ const wchar_t *_Dir,
+    _In_opt_z_ const wchar_t *_Filename,
+    _In_opt_z_ const wchar_t *_Ext);
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  _wputenv_s(
+    _In_z_ const wchar_t *_Name,
+    _In_z_ const wchar_t *_Value);
+
+  _CRTIMP
+  errno_t
+  __cdecl
+  _wsearchenv_s(
+    _In_z_ const wchar_t *_Filename,
+    _In_z_ const wchar_t *_EnvVar,
+    _Out_writes_z_(_SizeInWords) wchar_t *_ResultPath,
+    _In_ size_t _SizeInWords);
+
+  _CRTIMP
+  errno_t
+  __cdecl
+  _wsplitpath_s(
+    _In_z_ const wchar_t *_FullPath,
+    _Out_writes_opt_z_(_DriveSizeInWords) wchar_t *_Drive,
+    _In_ size_t _DriveSizeInWords,
+    _Out_writes_opt_z_(_DirSizeInWords) wchar_t *_Dir,
+    _In_ size_t _DirSizeInWords,
+    _Out_writes_opt_z_(_FilenameSizeInWords) wchar_t *_Filename,
+    _In_ size_t _FilenameSizeInWords,
+    _Out_writes_opt_z_(_ExtSizeInWords) wchar_t *_Ext,
+    _In_ size_t _ExtSizeInWords);
+
+#endif /* _WSTDLIBP_S_DEFINED */
+#endif /* _POSIX_ */
 
 #ifndef _WSTRING_S_DEFINED
 #define _WSTRING_S_DEFINED
-  _CRTIMP wchar_t *__cdecl wcstok_s(wchar_t *_Str,const wchar_t *_Delim,wchar_t **_Context);
-  _CRTIMP errno_t __cdecl _wcserror_s(wchar_t *_Buf,size_t _SizeInWords,int _ErrNum);
-  _CRTIMP errno_t __cdecl __wcserror_s(wchar_t *_Buffer,size_t _SizeInWords,const wchar_t *_ErrMsg);
-  _CRTIMP errno_t __cdecl _wcsnset_s(wchar_t *_Dst,size_t _DstSizeInWords,wchar_t _Val,size_t _MaxCount);
-  _CRTIMP errno_t __cdecl _wcsset_s(wchar_t *_Str,size_t _SizeInWords,wchar_t _Val);
-  _CRTIMP errno_t __cdecl _wcslwr_s(wchar_t *_Str,size_t _SizeInWords);
-  _CRTIMP errno_t __cdecl _wcslwr_s_l(wchar_t *_Str,size_t _SizeInWords,_locale_t _Locale);
-  _CRTIMP errno_t __cdecl _wcsupr_s(wchar_t *_Str,size_t _Size);
-  _CRTIMP errno_t __cdecl _wcsupr_s_l(wchar_t *_Str,size_t _Size,_locale_t _Locale);
-
-  _CRTIMP errno_t __cdecl wcsncat_s(wchar_t *_Dst,size_t _DstSizeInChars,const wchar_t *_Src,size_t _MaxCount);
-  _CRTIMP errno_t __cdecl _wcsncat_s_l(wchar_t *_Dst,size_t _DstSizeInChars,const wchar_t *_Src,size_t _MaxCount,_locale_t _Locale);
-  _CRTIMP errno_t __cdecl wcsncpy_s(wchar_t *_Dst,size_t _DstSizeInChars,const wchar_t *_Src,size_t _MaxCount);
-  _CRTIMP errno_t __cdecl _wcsncpy_s_l(wchar_t *_Dst,size_t _DstSizeInChars,const wchar_t *_Src,size_t _MaxCount,_locale_t _Locale);
-  _CRTIMP wchar_t *__cdecl _wcstok_s_l(wchar_t *_Str,const wchar_t *_Delim,wchar_t **_Context,_locale_t _Locale);
-  _CRTIMP errno_t __cdecl _wcsset_s_l(wchar_t *_Str,size_t _SizeInChars,unsigned int _Val,_locale_t _Locale);
-  _CRTIMP errno_t __cdecl _wcsnset_s_l(wchar_t *_Str,size_t _SizeInChars,unsigned int _Val, size_t _Count,_locale_t _Locale);
 
-#endif
+  _Check_return_
+  _CRTIMP
+  wchar_t *
+  __cdecl
+  wcstok_s(
+    _Inout_opt_z_ wchar_t *_Str,
+    _In_z_ const wchar_t *_Delim,
+    _Inout_ _Deref_prepost_opt_z_ wchar_t **_Context);
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  _wcserror_s(
+    _Out_writes_opt_z_(_SizeInWords) wchar_t *_Buf,
+    _In_ size_t _SizeInWords,
+    _In_ int _ErrNum);
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  __wcserror_s(
+    _Out_writes_opt_z_(_SizeInWords) wchar_t *_Buffer,
+    _In_ size_t _SizeInWords,
+    _In_z_ const wchar_t *_ErrMsg);
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  _wcsnset_s(
+    _Inout_updates_z_(_DstSizeInWords) wchar_t *_Dst,
+    _In_ size_t _DstSizeInWords,
+    wchar_t _Val,
+    _In_ size_t _MaxCount);
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  _wcsset_s(
+    _Inout_updates_z_(_SizeInWords) wchar_t *_Str,
+    _In_ size_t _SizeInWords,
+    wchar_t _Val);
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  _wcslwr_s(
+    _Inout_updates_z_(_SizeInWords) wchar_t *_Str,
+    _In_ size_t _SizeInWords);
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  _wcslwr_s_l(
+    _Inout_updates_z_(_SizeInWords) wchar_t *_Str,
+    _In_ size_t _SizeInWords,
+    _In_opt_ _locale_t _Locale);
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  _wcsupr_s(
+    _Inout_updates_z_(_Size) wchar_t *_Str,
+    _In_ size_t _Size);
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  _wcsupr_s_l(
+    _Inout_updates_z_(_Size) wchar_t *_Str,
+    _In_ size_t _Size,
+    _In_opt_ _locale_t _Locale);
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  wcsncat_s(
+    _Inout_updates_z_(_DstSizeInChars) wchar_t *_Dst,
+    _In_ size_t _DstSizeInChars,
+    _In_z_ const wchar_t *_Src,
+    _In_ size_t _MaxCount);
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  _wcsncat_s_l(
+    _Inout_updates_z_(_DstSizeInChars) wchar_t *_Dst,
+    _In_ size_t _DstSizeInChars,
+    _In_z_ const wchar_t *_Src,
+    _In_ size_t _MaxCount,
+    _In_opt_ _locale_t _Locale);
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  wcsncpy_s(
+    _Out_writes_z_(_DstSizeInChars) wchar_t *_Dst,
+    _In_ size_t _DstSizeInChars,
+    _In_z_ const wchar_t *_Src,
+    _In_ size_t _MaxCount);
+
+  _Check_return_wat_
+  _CRTIMP
+  errno_t
+  __cdecl
+  _wcsncpy_s_l(
+    _Out_writes_z_(_DstSizeInChars) wchar_t *_Dst,
+    _In_ size_t _DstSizeInChars,
+    _In_z_ const wchar_t *_Src,
+    _In_ size_t _MaxCount,
+    _In_opt_ _locale_t _Locale);
+
+  _CRTIMP
+  wchar_t *
+  __cdecl
+  _wcstok_s_l(
+    wchar_t *_Str,
+    const wchar_t *_Delim,
+    wchar_t **_Context,
+    _locale_t _Locale);
+
+  _CRTIMP
+  errno_t
+  __cdecl
+  _wcsset_s_l(
+    wchar_t *_Str,
+    size_t _SizeInChars,
+    unsigned int _Val,
+    _locale_t _Locale);
+
+  _CRTIMP
+  errno_t
+  __cdecl
+  _wcsnset_s_l(
+    wchar_t *_Str,
+    size_t _SizeInChars,
+    unsigned int _Val,
+    size_t _Count,
+    _locale_t _Locale);
+
+#endif /* _WSTRING_S_DEFINED */
 
 #ifndef _WTIME_S_DEFINED
 #define _WTIME_S_DEFINED
-  _CRTIMP errno_t __cdecl _wasctime_s(wchar_t *_Buf,size_t _SizeInWords,const struct tm *_Tm);
-  _CRTIMP errno_t __cdecl _wctime32_s(wchar_t *_Buf,size_t _SizeInWords,const __time32_t *_Time);
-  _CRTIMP errno_t __cdecl _wstrdate_s(wchar_t *_Buf,size_t _SizeInWords);
-  _CRTIMP errno_t __cdecl _wstrtime_s(wchar_t *_Buf,size_t _SizeInWords);
-  _CRTIMP errno_t __cdecl _wctime64_s(wchar_t *_Buf,size_t _SizeInWords,const __time64_t *_Time);
+
+  _CRTIMP
+  errno_t
+  __cdecl
+  _wasctime_s(
+    _Out_writes_(_SizeInWords) _Post_readable_size_(26) wchar_t *_Buf,
+    _In_ size_t _SizeInWords,
+    _In_ const struct tm *_Tm);
+
+  _CRTIMP
+  errno_t
+  __cdecl
+  _wctime32_s(
+    _Out_writes_(_SizeInWords) _Post_readable_size_(26) wchar_t *_Buf,
+    _In_ size_t _SizeInWords,
+    _In_ const __time32_t *_Time);
+
+  _CRTIMP
+  errno_t
+  __cdecl
+  _wstrdate_s(
+    _Out_writes_(_SizeInWords) _Post_readable_size_(9) wchar_t *_Buf,
+    _In_range_(>= , 9) size_t _SizeInWords);
+
+  _CRTIMP
+  errno_t
+  __cdecl
+  _wstrtime_s(
+    _Out_writes_(_SizeInWords) _Post_readable_size_(9) wchar_t *_Buf,
+    _In_ size_t _SizeInWords);
+
+  _CRTIMP
+  errno_t
+  __cdecl
+  _wctime64_s(
+    _Out_writes_(_SizeInWords) _Post_readable_size_(26) wchar_t *_Buf,
+    _In_ size_t _SizeInWords,
+    _In_ const __time64_t *_Time);
 
 #if !defined (RC_INVOKED) && !defined (_INC_WTIME_S_INL)
 #define _INC_WTIME_S_INL
@@ -118,15 +667,45 @@ extern "C" {
 __CRT_INLINE errno_t __cdecl _wctime_s(wchar_t *_Buffer,size_t _SizeInWords,const time_t *_Time) { return _wctime64_s(_Buffer,_SizeInWords,_Time); }
 #endif
 #endif
-#endif
 
-  _CRTIMP errno_t __cdecl mbsrtowcs_s(size_t *_Retval,wchar_t *_Dst,size_t _SizeInWords,const char **_PSrc,size_t _N,mbstate_t *_State);
-  _CRTIMP errno_t __cdecl wcrtomb_s(size_t *_Retval,char *_Dst,size_t _SizeInBytes,wchar_t _Ch,mbstate_t *_State);
-  _CRTIMP errno_t __cdecl wcsrtombs_s(size_t *_Retval,char *_Dst,size_t _SizeInBytes,const wchar_t **_Src,size_t _Size,mbstate_t *_State);
+#endif /* _WTIME_S_DEFINED */
+
+  _CRTIMP
+  errno_t
+  __cdecl
+  mbsrtowcs_s(
+    _Out_opt_ size_t *_Retval,
+    _Out_writes_opt_z_(_SizeInWords) wchar_t *_Dst,
+    _In_ size_t _SizeInWords,
+    _Inout_ _Deref_prepost_opt_valid_ const char **_PSrc,
+    _In_ size_t _N,
+    _Out_opt_ mbstate_t *_State);
+
+  _CRTIMP
+  errno_t
+  __cdecl
+  wcrtomb_s(
+    _Out_opt_ size_t *_Retval,
+    _Out_writes_opt_z_(_SizeInBytes) char *_Dst,
+    _In_ size_t _SizeInBytes,
+    _In_ wchar_t _Ch,
+    _Out_opt_ mbstate_t *_State);
+
+  _CRTIMP
+  errno_t
+  __cdecl
+  wcsrtombs_s(
+    _Out_opt_ size_t *_Retval,
+    _Out_writes_bytes_to_opt_(_SizeInBytes, *_Retval) char *_Dst,
+    _In_ size_t _SizeInBytes,
+    _Inout_ _Deref_prepost_z_ const wchar_t **_Src,
+    _In_ size_t _Size,
+    _Out_opt_ mbstate_t *_State);
 
 #ifdef __cplusplus
 }
 #endif
 
-#endif
-#endif
+#endif /* MINGW_HAS_SECURE_API */
+
+#endif /* _INC_WCHAR_S */