You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
text3/stdlib.h

1363 lines
42 KiB

2 years ago
//
// stdlib.h
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// The C Standard Library <stdlib.h> header.
//
#pragma once
#ifndef _INC_STDLIB // include guard for 3rd party interop
#define _INC_STDLIB
#include <corecrt.h>
#include <corecrt_malloc.h>
#include <corecrt_search.h>
#include <corecrt_wstdlib.h>
#include <limits.h>
#pragma warning(push)
#pragma warning(disable: _UCRT_DISABLED_WARNINGS)
_UCRT_DISABLE_CLANG_WARNINGS
_CRT_BEGIN_C_HEADER
#ifndef _countof
#define _countof __crt_countof
#endif
// Minimum and maximum macros
#define __max(a,b) (((a) > (b)) ? (a) : (b))
#define __min(a,b) (((a) < (b)) ? (a) : (b))
_ACRTIMP void __cdecl _swab(
_Inout_updates_(_SizeInBytes) _Post_readable_size_(_SizeInBytes) char* _Buf1,
_Inout_updates_(_SizeInBytes) _Post_readable_size_(_SizeInBytes) char* _Buf2,
_In_ int _SizeInBytes
);
//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
//
// Exit and Abort
//
//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
// Argument values for exit()
#define EXIT_SUCCESS 0
#define EXIT_FAILURE 1
#if _CRT_FUNCTIONS_REQUIRED
_ACRTIMP __declspec(noreturn) void __cdecl exit(_In_ int _Code);
_ACRTIMP __declspec(noreturn) void __cdecl _exit(_In_ int _Code);
_ACRTIMP __declspec(noreturn) void __cdecl _Exit(_In_ int _Code);
_ACRTIMP __declspec(noreturn) void __cdecl quick_exit(_In_ int _Code);
_ACRTIMP __declspec(noreturn) void __cdecl abort(void);
#endif // _CRT_FUNCTIONS_REQUIRED
// Argument values for _set_abort_behavior().
#define _WRITE_ABORT_MSG 0x1 // debug only, has no effect in release
#define _CALL_REPORTFAULT 0x2
_ACRTIMP unsigned int __cdecl _set_abort_behavior(
_In_ unsigned int _Flags,
_In_ unsigned int _Mask
);
#ifndef _CRT_ONEXIT_T_DEFINED
#define _CRT_ONEXIT_T_DEFINED
typedef int (__CRTDECL* _onexit_t)(void);
#ifdef _M_CEE
typedef int (__clrcall* _onexit_m_t)(void);
#endif
#endif
#if defined(_CRT_INTERNAL_NONSTDC_NAMES) && _CRT_INTERNAL_NONSTDC_NAMES
// Non-ANSI name for compatibility
#define onexit_t _onexit_t
#endif
#ifdef _M_CEE
#pragma warning (push)
#pragma warning (disable: 4985) // Attributes not present on previous declaration
_Check_return_ int __clrcall _atexit_m_appdomain(_In_opt_ void (__clrcall* _Function)(void));
_onexit_m_t __clrcall _onexit_m_appdomain(_onexit_m_t _Function);
#ifdef _M_CEE_MIXED
#ifdef __cplusplus
[System::Security::SecurityCritical]
#endif
_Check_return_ int __clrcall _atexit_m(_In_opt_ void (__clrcall* _Function)(void));
_onexit_m_t __clrcall _onexit_m(_onexit_m_t _Function);
#else
#ifdef __cplusplus
[System::Security::SecurityCritical]
#endif
_Check_return_ inline int __clrcall _atexit_m(_In_opt_ void (__clrcall* _Function)(void))
{
return _atexit_m_appdomain(_Function);
}
inline _onexit_m_t __clrcall _onexit_m(_onexit_t _Function)
{
return _onexit_m_appdomain(_Function);
}
#endif
#pragma warning (pop)
#endif
#ifdef _M_CEE_PURE
// In pure mode, atexit is the same as atexit_m_appdomain
extern "C++"
{
#ifdef __cplusplus
[System::Security::SecurityCritical]
#endif
inline int __clrcall atexit(void (__clrcall* _Function)(void))
{
return _atexit_m_appdomain(_Function);
}
inline _onexit_t __clrcall _onexit(_onexit_t _Function)
{
return _onexit_m_appdomain(_Function);
}
} // extern "C++"
#else
int __cdecl atexit(void (__cdecl*)(void));
_onexit_t __cdecl _onexit(_In_opt_ _onexit_t _Func);
#endif
int __cdecl at_quick_exit(void (__cdecl*)(void));
//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
//
// Global State (errno, global handlers, etc.)
//
//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
#ifndef _M_CEE_PURE
// a purecall handler procedure. Never returns normally
typedef void (__cdecl* _purecall_handler)(void);
// Invalid parameter handler function pointer type
typedef void (__cdecl* _invalid_parameter_handler)(
wchar_t const*,
wchar_t const*,
wchar_t const*,
unsigned int,
uintptr_t
);
// Establishes a purecall handler
_VCRTIMP _purecall_handler __cdecl _set_purecall_handler(
_In_opt_ _purecall_handler _Handler
);
_VCRTIMP _purecall_handler __cdecl _get_purecall_handler(void);
// Establishes an invalid parameter handler
_ACRTIMP _invalid_parameter_handler __cdecl _set_invalid_parameter_handler(
_In_opt_ _invalid_parameter_handler _Handler
);
_ACRTIMP _invalid_parameter_handler __cdecl _get_invalid_parameter_handler(void);
_ACRTIMP _invalid_parameter_handler __cdecl _set_thread_local_invalid_parameter_handler(
_In_opt_ _invalid_parameter_handler _Handler
);
_ACRTIMP _invalid_parameter_handler __cdecl _get_thread_local_invalid_parameter_handler(void);
#endif
#if defined __cplusplus && defined _M_CEE_PURE
extern "C++"
{
typedef void (__clrcall* _purecall_handler)(void);
typedef _purecall_handler _purecall_handler_m;
_MRTIMP _purecall_handler __cdecl _set_purecall_handler(
_In_opt_ _purecall_handler _Handler
);
} // extern "C++"
#endif
// Argument values for _set_error_mode().
#define _OUT_TO_DEFAULT 0
#define _OUT_TO_STDERR 1
#define _OUT_TO_MSGBOX 2
#define _REPORT_ERRMODE 3
_Check_return_opt_ _ACRTIMP int __cdecl _set_error_mode(_In_ int _Mode);
#if _CRT_FUNCTIONS_REQUIRED
_ACRTIMP int* __cdecl _errno(void);
#define errno (*_errno())
_ACRTIMP errno_t __cdecl _set_errno(_In_ int _Value);
_ACRTIMP errno_t __cdecl _get_errno(_Out_ int* _Value);
_ACRTIMP unsigned long* __cdecl __doserrno(void);
#define _doserrno (*__doserrno())
_ACRTIMP errno_t __cdecl _set_doserrno(_In_ unsigned long _Value);
_ACRTIMP errno_t __cdecl _get_doserrno(_Out_ unsigned long * _Value);
// This is non-const for backwards compatibility; do not modify it.
_ACRTIMP _CRT_INSECURE_DEPRECATE(strerror) char** __cdecl __sys_errlist(void);
#define _sys_errlist (__sys_errlist())
_ACRTIMP _CRT_INSECURE_DEPRECATE(strerror) int * __cdecl __sys_nerr(void);
#define _sys_nerr (*__sys_nerr())
_ACRTIMP void __cdecl perror(_In_opt_z_ char const* _ErrMsg);
#endif // _CRT_FUNCTIONS_REQUIRED
// These point to the executable module name.
_CRT_INSECURE_DEPRECATE_GLOBALS(_get_pgmptr ) _ACRTIMP char** __cdecl __p__pgmptr (void);
_CRT_INSECURE_DEPRECATE_GLOBALS(_get_wpgmptr) _ACRTIMP wchar_t** __cdecl __p__wpgmptr(void);
_CRT_INSECURE_DEPRECATE_GLOBALS(_get_fmode ) _ACRTIMP int* __cdecl __p__fmode (void);
#ifdef _CRT_DECLARE_GLOBAL_VARIABLES_DIRECTLY
_CRT_INSECURE_DEPRECATE_GLOBALS(_get_pgmptr ) extern char* _pgmptr;
_CRT_INSECURE_DEPRECATE_GLOBALS(_get_wpgmptr) extern wchar_t* _wpgmptr;
#ifndef _CORECRT_BUILD
_CRT_INSECURE_DEPRECATE_GLOBALS(_get_fmode ) extern int _fmode;
#endif
#else
#define _pgmptr (*__p__pgmptr ())
#define _wpgmptr (*__p__wpgmptr())
#define _fmode (*__p__fmode ())
#endif
_Success_(return == 0)
_ACRTIMP errno_t __cdecl _get_pgmptr (_Outptr_result_z_ char** _Value);
_Success_(return == 0)
_ACRTIMP errno_t __cdecl _get_wpgmptr(_Outptr_result_z_ wchar_t** _Value);
_ACRTIMP errno_t __cdecl _set_fmode (_In_ int _Mode );
_ACRTIMP errno_t __cdecl _get_fmode (_Out_ int* _PMode);
//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
//
// Math
//
//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
typedef struct _div_t
{
int quot;
int rem;
} div_t;
typedef struct _ldiv_t
{
long quot;
long rem;
} ldiv_t;
typedef struct _lldiv_t
{
long long quot;
long long rem;
} lldiv_t;
_Check_return_ int __cdecl abs (_In_ int _Number);
_Check_return_ long __cdecl labs (_In_ long _Number);
_Check_return_ long long __cdecl llabs (_In_ long long _Number);
_Check_return_ __int64 __cdecl _abs64(_In_ __int64 _Number);
_Check_return_ unsigned short __cdecl _byteswap_ushort(_In_ unsigned short _Number);
_Check_return_ unsigned long __cdecl _byteswap_ulong (_In_ unsigned long _Number);
_Check_return_ unsigned __int64 __cdecl _byteswap_uint64(_In_ unsigned __int64 _Number);
_Check_return_ _ACRTIMP div_t __cdecl div (_In_ int _Numerator, _In_ int _Denominator);
_Check_return_ _ACRTIMP ldiv_t __cdecl ldiv (_In_ long _Numerator, _In_ long _Denominator);
_Check_return_ _ACRTIMP lldiv_t __cdecl lldiv(_In_ long long _Numerator, _In_ long long _Denominator);
// These functions have declspecs in their declarations in the Windows headers,
// which cause PREfast to fire 6540.
#pragma warning(push)
#pragma warning(disable: 6540)
unsigned int __cdecl _rotl(
_In_ unsigned int _Value,
_In_ int _Shift
);
_Check_return_
unsigned long __cdecl _lrotl(
_In_ unsigned long _Value,
_In_ int _Shift
);
unsigned __int64 __cdecl _rotl64(
_In_ unsigned __int64 _Value,
_In_ int _Shift
);
unsigned int __cdecl _rotr(
_In_ unsigned int _Value,
_In_ int _Shift
);
_Check_return_
unsigned long __cdecl _lrotr(
_In_ unsigned long _Value,
_In_ int _Shift
);
unsigned __int64 __cdecl _rotr64(
_In_ unsigned __int64 _Value,
_In_ int _Shift
);
#pragma warning(pop)
// Maximum value that can be returned by the rand function:
#define RAND_MAX 0x7fff
_ACRTIMP void __cdecl srand(_In_ unsigned int _Seed);
_Check_return_ _ACRTIMP int __cdecl rand(void);
#if defined _CRT_RAND_S || defined _CRTBLD
_ACRTIMP errno_t __cdecl rand_s(_Out_ unsigned int* _RandomValue);
#endif
#ifdef __cplusplus
extern "C++"
{
inline long abs(long const _X) throw()
{
return labs(_X);
}
inline long long abs(long long const _X) throw()
{
return llabs(_X);
}
inline ldiv_t div(long const _A1, long const _A2) throw()
{
return ldiv(_A1, _A2);
}
inline lldiv_t div(long long const _A1, long long const _A2) throw()
{
return lldiv(_A1, _A2);
}
}
#endif // __cplusplus
// Structs used to fool the compiler into not generating floating point
// instructions when copying and pushing [long] double values
#define _CRT_DOUBLE_DEC
#ifndef _LDSUPPORT
#pragma pack(push, 4)
typedef struct
{
unsigned char ld[10];
} _LDOUBLE;
#pragma pack(pop)
#define _PTR_LD(x) ((unsigned char*)(&(x)->ld))
#else // _LDSUPPORT
// push and pop long, which is #defined as __int64 by a spec2k test
#pragma push_macro("long")
#undef long
typedef long double _LDOUBLE;
#pragma pop_macro("long")
#define _PTR_LD(x) ((unsigned char *)(x))
#endif // _LDSUPPORT
typedef struct
{
double x;
} _CRT_DOUBLE;
typedef struct
{
float f;
} _CRT_FLOAT;
// push and pop long, which is #defined as __int64 by a spec2k test
#pragma push_macro("long")
#undef long
typedef struct
{
long double x;
} _LONGDOUBLE;
#pragma pop_macro("long")
#pragma pack(push, 4)
typedef struct
{
unsigned char ld12[12];
} _LDBL12;
#pragma pack(pop)
//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
//
// Narrow String to Number Conversions
//
//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
_Check_return_ _ACRTIMP double __cdecl atof (_In_z_ char const* _String);
_Check_return_ _CRT_JIT_INTRINSIC _ACRTIMP int __cdecl atoi (_In_z_ char const* _String);
_Check_return_ _ACRTIMP long __cdecl atol (_In_z_ char const* _String);
_Check_return_ _ACRTIMP long long __cdecl atoll (_In_z_ char const* _String);
_Check_return_ _ACRTIMP __int64 __cdecl _atoi64(_In_z_ char const* _String);
_Check_return_ _ACRTIMP double __cdecl _atof_l (_In_z_ char const* _String, _In_opt_ _locale_t _Locale);
_Check_return_ _ACRTIMP int __cdecl _atoi_l (_In_z_ char const* _String, _In_opt_ _locale_t _Locale);
_Check_return_ _ACRTIMP long __cdecl _atol_l (_In_z_ char const* _String, _In_opt_ _locale_t _Locale);
_Check_return_ _ACRTIMP long long __cdecl _atoll_l (_In_z_ char const* _String, _In_opt_ _locale_t _Locale);
_Check_return_ _ACRTIMP __int64 __cdecl _atoi64_l(_In_z_ char const* _String, _In_opt_ _locale_t _Locale);
_Check_return_ _ACRTIMP int __cdecl _atoflt (_Out_ _CRT_FLOAT* _Result, _In_z_ char const* _String);
_Check_return_ _ACRTIMP int __cdecl _atodbl (_Out_ _CRT_DOUBLE* _Result, _In_z_ char* _String);
_Check_return_ _ACRTIMP int __cdecl _atoldbl(_Out_ _LDOUBLE* _Result, _In_z_ char* _String);
_Check_return_
_ACRTIMP int __cdecl _atoflt_l(
_Out_ _CRT_FLOAT* _Result,
_In_z_ char const* _String,
_In_opt_ _locale_t _Locale
);
_Check_return_
_ACRTIMP int __cdecl _atodbl_l(
_Out_ _CRT_DOUBLE* _Result,
_In_z_ char* _String,
_In_opt_ _locale_t _Locale
);
_Check_return_
_ACRTIMP int __cdecl _atoldbl_l(
_Out_ _LDOUBLE* _Result,
_In_z_ char* _String,
_In_opt_ _locale_t _Locale
);
_Check_return_
_ACRTIMP float __cdecl strtof(
_In_z_ char const* _String,
_Out_opt_ _Deref_post_z_ char** _EndPtr
);
_Check_return_
_ACRTIMP float __cdecl _strtof_l(
_In_z_ char const* _String,
_Out_opt_ _Deref_post_z_ char** _EndPtr,
_In_opt_ _locale_t _Locale
);
_Check_return_
_ACRTIMP double __cdecl strtod(
_In_z_ char const* _String,
_Out_opt_ _Deref_post_z_ char** _EndPtr
);
_Check_return_
_ACRTIMP double __cdecl _strtod_l(
_In_z_ char const* _String,
_Out_opt_ _Deref_post_z_ char** _EndPtr,
_In_opt_ _locale_t _Locale
);
_Check_return_
_ACRTIMP long double __cdecl strtold(
_In_z_ char const* _String,
_Out_opt_ _Deref_post_z_ char** _EndPtr
);
_Check_return_
_ACRTIMP long double __cdecl _strtold_l(
_In_z_ char const* _String,
_Out_opt_ _Deref_post_z_ char** _EndPtr,
_In_opt_ _locale_t _Locale
);
_Check_return_
_ACRTIMP long __cdecl strtol(
_In_z_ char const* _String,
_Out_opt_ _Deref_post_z_ char** _EndPtr,
_In_ int _Radix
);
_Check_return_
_ACRTIMP long __cdecl _strtol_l(
_In_z_ char const* _String,
_Out_opt_ _Deref_post_z_ char** _EndPtr,
_In_ int _Radix,
_In_opt_ _locale_t _Locale
);
_Check_return_
_ACRTIMP long long __cdecl strtoll(
_In_z_ char const* _String,
_Out_opt_ _Deref_post_z_ char** _EndPtr,
_In_ int _Radix
);
_Check_return_
_ACRTIMP long long __cdecl _strtoll_l(
_In_z_ char const* _String,
_Out_opt_ _Deref_post_z_ char** _EndPtr,
_In_ int _Radix,
_In_opt_ _locale_t _Locale
);
_Check_return_
_ACRTIMP unsigned long __cdecl strtoul(
_In_z_ char const* _String,
_Out_opt_ _Deref_post_z_ char** _EndPtr,
_In_ int _Radix
);
_Check_return_
_ACRTIMP unsigned long __cdecl _strtoul_l(
_In_z_ char const* _String,
_Out_opt_ _Deref_post_z_ char** _EndPtr,
_In_ int _Radix,
_In_opt_ _locale_t _Locale
);
_Check_return_
_ACRTIMP unsigned long long __cdecl strtoull(
_In_z_ char const* _String,
_Out_opt_ _Deref_post_z_ char** _EndPtr,
_In_ int _Radix
);
_Check_return_
_ACRTIMP unsigned long long __cdecl _strtoull_l(
_In_z_ char const* _String,
_Out_opt_ _Deref_post_z_ char** _EndPtr,
_In_ int _Radix,
_In_opt_ _locale_t _Locale
);
_Check_return_
_ACRTIMP __int64 __cdecl _strtoi64(
_In_z_ char const* _String,
_Out_opt_ _Deref_post_z_ char** _EndPtr,
_In_ int _Radix
);
_Check_return_
_ACRTIMP __int64 __cdecl _strtoi64_l(
_In_z_ char const* _String,
_Out_opt_ _Deref_post_z_ char** _EndPtr,
_In_ int _Radix,
_In_opt_ _locale_t _Locale
);
_Check_return_
_ACRTIMP unsigned __int64 __cdecl _strtoui64(
_In_z_ char const* _String,
_Out_opt_ _Deref_post_z_ char** _EndPtr,
_In_ int _Radix
);
_Check_return_
_ACRTIMP unsigned __int64 __cdecl _strtoui64_l(
_In_z_ char const* _String,
_Out_opt_ _Deref_post_z_ char** _EndPtr,
_In_ int _Radix,
_In_opt_ _locale_t _Locale
);
//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
//
// Number to Narrow String Conversions
//
//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
_Success_(return == 0)
_Check_return_opt_
_ACRTIMP errno_t __cdecl _itoa_s(
_In_ int _Value,
_Out_writes_z_(_BufferCount) char* _Buffer,
_In_ size_t _BufferCount,
_In_ int _Radix
);
__DEFINE_CPP_OVERLOAD_SECURE_FUNC_1_1(
_Success_(return == 0)
errno_t, _itoa_s,
_In_ int, _Value,
char, _Buffer,
_In_ int, _Radix
)
__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_1_1(
char*, __RETURN_POLICY_DST, _ACRTIMP, _itoa,
_In_ int, _Value,
_Pre_notnull_ _Post_z_, char, _Buffer,
_In_ int, _Radix
)
_Success_(return == 0)
_Check_return_opt_
_ACRTIMP errno_t __cdecl _ltoa_s(
_In_ long _Value,
_Out_writes_z_(_BufferCount) char* _Buffer,
_In_ size_t _BufferCount,
_In_ int _Radix
);
__DEFINE_CPP_OVERLOAD_SECURE_FUNC_1_1(
errno_t, _ltoa_s,
_In_ long, _Value,
char, _Buffer,
_In_ int, _Radix
)
__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_1_1(
char*, __RETURN_POLICY_DST, _ACRTIMP, _ltoa,
_In_ long, _Value,
_Pre_notnull_ _Post_z_, char, _Buffer,
_In_ int, _Radix
)
_Success_(return == 0)
_Check_return_opt_
_ACRTIMP errno_t __cdecl _ultoa_s(
_In_ unsigned long _Value,
_Out_writes_z_(_BufferCount) char* _Buffer,
_In_ size_t _BufferCount,
_In_ int _Radix
);
__DEFINE_CPP_OVERLOAD_SECURE_FUNC_1_1(
errno_t, _ultoa_s,
_In_ unsigned long, _Value,
char, _Buffer,
_In_ int, _Radix
)
__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_1_1(
char*, __RETURN_POLICY_DST, _ACRTIMP, _ultoa,
_In_ unsigned long, _Value,
_Pre_notnull_ _Post_z_, char, _Buffer,
_In_ int, _Radix
)
_Success_(return == 0)
_Check_return_opt_
_ACRTIMP errno_t __cdecl _i64toa_s(
_In_ __int64 _Value,
_Out_writes_z_(_BufferCount) char* _Buffer,
_In_ size_t _BufferCount,
_In_ int _Radix
);
_Success_(return == 0)
_CRT_INSECURE_DEPRECATE(_i64toa_s)
_ACRTIMP char* __cdecl _i64toa(
_In_ __int64 _Value,
_Pre_notnull_ _Post_z_ char* _Buffer,
_In_ int _Radix
);
_Success_(return == 0)
_Check_return_opt_
_ACRTIMP errno_t __cdecl _ui64toa_s(
_In_ unsigned __int64 _Value,
_Out_writes_z_(_BufferCount) char* _Buffer,
_In_ size_t _BufferCount,
_In_ int _Radix
);
_CRT_INSECURE_DEPRECATE(_ui64toa_s)
_ACRTIMP char* __cdecl _ui64toa(
_In_ unsigned __int64 _Value,
_Pre_notnull_ _Post_z_ char* _Buffer,
_In_ int _Radix
);
// _CVTBUFSIZE is the maximum size for the per-thread conversion buffer. It
// should be at least as long as the number of digits in the largest double
// precision value (?.?e308 in IEEE arithmetic). We will use the same size
// buffer as is used in the printf support routines.
//
// (This value actually allows 40 additional decimal places; even though there
// are only 16 digits of accuracy in a double precision IEEE number, the user may
// ask for more to effect zero padding.)
#define _CVTBUFSIZE (309 + 40) // # of digits in max. dp value + slop
_Success_(return == 0)
_Check_return_wat_
_ACRTIMP errno_t __cdecl _ecvt_s(
_Out_writes_z_(_BufferCount) char* _Buffer,
_In_ size_t _BufferCount,
_In_ double _Value,
_In_ int _DigitCount,
_Out_ int* _PtDec,
_Out_ int* _PtSign
);
__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_4(
errno_t, _ecvt_s,
char, _Buffer,
_In_ double, _Value,
_In_ int, _DigitCount,
_Out_ int*, _PtDec,
_Out_ int*, _PtSign
)
_Check_return_ _CRT_INSECURE_DEPRECATE(_ecvt_s)
_ACRTIMP char* __cdecl _ecvt(
_In_ double _Value,
_In_ int _DigitCount,
_Out_ int* _PtDec,
_Out_ int* _PtSign
);
_Success_(return == 0)
_Check_return_wat_
_ACRTIMP errno_t __cdecl _fcvt_s(
_Out_writes_z_(_BufferCount) char* _Buffer,
_In_ size_t _BufferCount,
_In_ double _Value,
_In_ int _FractionalDigitCount,
_Out_ int* _PtDec,
_Out_ int* _PtSign
);
__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_4(
_Success_(return == 0)
errno_t, _fcvt_s,
char, _Buffer,
_In_ double, _Value,
_In_ int, _FractionalDigitCount,
_Out_ int*, _PtDec,
_Out_ int*, _PtSign
)
_Success_(return == 0)
_Check_return_ _CRT_INSECURE_DEPRECATE(_fcvt_s)
_ACRTIMP char* __cdecl _fcvt(
_In_ double _Value,
_In_ int _FractionalDigitCount,
_Out_ int* _PtDec,
_Out_ int* _PtSign
);
_Success_(return == 0)
_ACRTIMP errno_t __cdecl _gcvt_s(
_Out_writes_z_(_BufferCount) char* _Buffer,
_In_ size_t _BufferCount,
_In_ double _Value,
_In_ int _DigitCount
);
__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_2(
_Success_(return == 0)
errno_t, _gcvt_s,
char, _Buffer,
_In_ double, _Value,
_In_ int, _DigitCount
)
_CRT_INSECURE_DEPRECATE(_gcvt_s)
_ACRTIMP char* __cdecl _gcvt(
_In_ double _Value,
_In_ int _DigitCount,
_Pre_notnull_ _Post_z_ char* _Buffer
);
//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
//
// Multibyte String Operations and Conversions
//
//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
// Maximum number of bytes in multi-byte character in the current locale
// (also defined in ctype.h).
#ifndef MB_CUR_MAX
#if defined _CRT_DISABLE_PERFCRIT_LOCKS && !defined _DLL
#define MB_CUR_MAX __mb_cur_max
#else
#define MB_CUR_MAX ___mb_cur_max_func()
#endif
#ifdef _CRT_DECLARE_GLOBAL_VARIABLES_DIRECTLY
extern int __mb_cur_max;
#else
#define __mb_cur_max (___mb_cur_max_func())
#endif
_Post_satisfies_(return > 0 && return < MB_LEN_MAX)
_ACRTIMP int __cdecl ___mb_cur_max_func(void);
_Post_satisfies_(return > 0 && return < MB_LEN_MAX)
_ACRTIMP int __cdecl ___mb_cur_max_l_func(_locale_t _Locale);
#endif
_Check_return_
_ACRTIMP int __cdecl mblen(
_In_reads_bytes_opt_(_MaxCount) _Pre_opt_z_ char const* _Ch,
_In_ size_t _MaxCount
);
_Check_return_
_ACRTIMP int __cdecl _mblen_l(
_In_reads_bytes_opt_(_MaxCount) _Pre_opt_z_ char const* _Ch,
_In_ size_t _MaxCount,
_In_opt_ _locale_t _Locale
);
_Check_return_
_Post_satisfies_(return <= _String_length_(_String))
_ACRTIMP size_t __cdecl _mbstrlen(
_In_z_ char const* _String
);
_Check_return_
_Post_satisfies_(return <= _String_length_(_String) || return == (size_t)-1)
_ACRTIMP size_t __cdecl _mbstrlen_l(
_In_z_ char const* _String,
_In_opt_ _locale_t _Locale
);
_Check_return_
_Post_satisfies_((return <= _String_length_(_String) && return <= _MaxCount) || return == (size_t)-1)
_ACRTIMP size_t __cdecl _mbstrnlen(
_In_z_ char const* _String,
_In_ size_t _MaxCount
);
_Post_satisfies_((return <= _String_length_(_String) && return <= _MaxCount) || return == (size_t)-1)
_Check_return_
_ACRTIMP size_t __cdecl _mbstrnlen_l(
_In_z_ char const* _String,
_In_ size_t _MaxCount,
_In_opt_ _locale_t _Locale
);
_Success_(return != -1)
_ACRTIMP int __cdecl mbtowc(
_Pre_notnull_ _Post_z_ wchar_t* _DstCh,
_In_reads_or_z_opt_(_SrcSizeInBytes) char const* _SrcCh,
_In_ size_t _SrcSizeInBytes
);
_Success_(return != -1)
_ACRTIMP int __cdecl _mbtowc_l(
_Pre_notnull_ _Post_z_ wchar_t* _DstCh,
_In_reads_or_z_opt_(_SrcSizeInBytes) char const* _SrcCh,
_In_ size_t _SrcSizeInBytes,
_In_opt_ _locale_t _Locale
);
_Check_return_opt_
_ACRTIMP errno_t __cdecl mbstowcs_s(
_Out_opt_ size_t* _PtNumOfCharConverted,
_Out_writes_to_opt_(_SizeInWords, *_PtNumOfCharConverted) wchar_t* _DstBuf,
_In_ size_t _SizeInWords,
_In_reads_or_z_(_MaxCount) char const* _SrcBuf,
_In_ size_t _MaxCount
);
__DEFINE_CPP_OVERLOAD_SECURE_FUNC_1_2(
errno_t, mbstowcs_s,
_Out_opt_ size_t*, _PtNumOfCharConverted,
_Post_z_ wchar_t, _Dest,
_In_z_ char const*, _Source,
_In_ size_t, _MaxCount
)
__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_SIZE(
_ACRTIMP, mbstowcs,
_Out_writes_opt_z_(_MaxCount), wchar_t, _Dest,
_In_z_ char const*, _Source,
_In_ size_t, _MaxCount
)
_Check_return_opt_
_ACRTIMP errno_t __cdecl _mbstowcs_s_l(
_Out_opt_ size_t* _PtNumOfCharConverted,
_Out_writes_to_opt_(_SizeInWords, *_PtNumOfCharConverted) wchar_t* _DstBuf,
_In_ size_t _SizeInWords,
_In_reads_or_z_(_MaxCount) char const* _SrcBuf,
_In_ size_t _MaxCount,
_In_opt_ _locale_t _Locale
);
__DEFINE_CPP_OVERLOAD_SECURE_FUNC_1_3(
errno_t, _mbstowcs_s_l,
_Out_opt_ size_t*, _PtNumOfCharConverted,
_Post_z_ wchar_t, _Dest,
_In_z_ char const*, _Source,
_In_ size_t, _MaxCount,
_In_opt_ _locale_t, _Locale
)
__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_3_SIZE_EX(
_ACRTIMP, _mbstowcs_l, _mbstowcs_s_l,
_Out_writes_opt_z_(_Size) wchar_t,
_Out_writes_z_(_MaxCount), wchar_t, _Dest,
_In_z_ char const*, _Source,
_In_ size_t, _MaxCount,
_In_opt_ _locale_t, _Locale
)
_CRT_INSECURE_DEPRECATE(wctomb_s)
_ACRTIMP int __cdecl wctomb(
_Out_writes_opt_z_(MB_LEN_MAX) char* _MbCh,
_In_ wchar_t _WCh
);
_CRT_INSECURE_DEPRECATE(_wctomb_s_l)
_ACRTIMP int __cdecl _wctomb_l(
_Pre_maybenull_ _Post_z_ char* _MbCh,
_In_ wchar_t _WCh,
_In_opt_ _locale_t _Locale
);
#if __STDC_WANT_SECURE_LIB__
_Check_return_wat_
_ACRTIMP errno_t __cdecl wctomb_s(
_Out_opt_ int* _SizeConverted,
_Out_writes_bytes_to_opt_(_SizeInBytes, *_SizeConverted) char* _MbCh,
_In_ rsize_t _SizeInBytes,
_In_ wchar_t _WCh
);
#endif // __STDC_WANT_SECURE_LIB__
_Check_return_wat_
_ACRTIMP errno_t __cdecl _wctomb_s_l(
_Out_opt_ int* _SizeConverted,
_Out_writes_opt_z_(_SizeInBytes) char* _MbCh,
_In_ size_t _SizeInBytes,
_In_ wchar_t _WCh,
_In_opt_ _locale_t _Locale);
_Check_return_wat_
_ACRTIMP errno_t __cdecl wcstombs_s(
_Out_opt_ size_t* _PtNumOfCharConverted,
_Out_writes_bytes_to_opt_(_DstSizeInBytes, *_PtNumOfCharConverted) char* _Dst,
_In_ size_t _DstSizeInBytes,
_In_z_ wchar_t const* _Src,
_In_ size_t _MaxCountInBytes
);
__DEFINE_CPP_OVERLOAD_SECURE_FUNC_1_2(
errno_t, wcstombs_s,
_Out_opt_ size_t*, _PtNumOfCharConverted,
_Out_writes_bytes_opt_(_Size) char, _Dest,
_In_z_ wchar_t const*, _Source,
_In_ size_t, _MaxCount
)
__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_2_SIZE(
_ACRTIMP, wcstombs,
_Out_writes_opt_(_MaxCount), char, _Dest,
_In_z_ wchar_t const*, _Source,
_In_ size_t, _MaxCount
)
_Check_return_wat_
_ACRTIMP errno_t __cdecl _wcstombs_s_l(
_Out_opt_ size_t* _PtNumOfCharConverted,
_Out_writes_bytes_to_opt_(_DstSizeInBytes, *_PtNumOfCharConverted) char* _Dst,
_In_ size_t _DstSizeInBytes,
_In_z_ wchar_t const* _Src,
_In_ size_t _MaxCountInBytes,
_In_opt_ _locale_t _Locale
);
__DEFINE_CPP_OVERLOAD_SECURE_FUNC_1_3(
errno_t, _wcstombs_s_l,
_Out_opt_ size_t*, _PtNumOfCharConverted,
_Out_writes_opt_(_Size) char, _Dest,
_In_z_ wchar_t const*, _Source,
_In_ size_t, _MaxCount,
_In_opt_ _locale_t, _Locale
)
__DEFINE_CPP_OVERLOAD_STANDARD_NFUNC_0_3_SIZE_EX(
_ACRTIMP, _wcstombs_l, _wcstombs_s_l,
_Out_writes_opt_z_(_Size) char,
_Out_writes_(_MaxCount), char, _Dest,
_In_z_ wchar_t const*, _Source,
_In_ size_t, _MaxCount,
_In_opt_ _locale_t, _Locale
)
//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
//
// Path Manipulation
//
//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
// Sizes for buffers used by the _makepath() and _splitpath() functions.
// note that the sizes include space for 0-terminator
#define _MAX_PATH 260 // max. length of full pathname
#define _MAX_DRIVE 3 // max. length of drive component
#define _MAX_DIR 256 // max. length of path component
#define _MAX_FNAME 256 // max. length of file name component
#define _MAX_EXT 256 // max. length of extension component
#pragma push_macro("_fullpath")
#undef _fullpath
_Success_(return != 0)
_Check_return_
_ACRTIMP _CRTALLOCATOR char* __cdecl _fullpath(
_Out_writes_opt_z_(_BufferCount) char* _Buffer,
_In_z_ char const* _Path,
_In_ size_t _BufferCount
);
#pragma pop_macro("_fullpath")
_Check_return_wat_
_ACRTIMP errno_t __cdecl _makepath_s(
_Out_writes_z_(_BufferCount) char* _Buffer,
_In_ size_t _BufferCount,
_In_opt_z_ char const* _Drive,
_In_opt_z_ char const* _Dir,
_In_opt_z_ char const* _Filename,
_In_opt_z_ char const* _Ext
);
__DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_4(
errno_t, _makepath_s,
char, _Buffer,
_In_opt_z_ char const*, _Drive,
_In_opt_z_ char const*, _Dir,
_In_opt_z_ char const*, _Filename,
_In_opt_z_ char const*, _Ext
)
__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_0_4(
void, __RETURN_POLICY_VOID, _ACRTIMP, _makepath,
_Pre_notnull_ _Post_z_, char, _Buffer,
_In_opt_z_ char const*, _Drive,
_In_opt_z_ char const*, _Dir,
_In_opt_z_ char const*, _Filename,
_In_opt_z_ char const*, _Ext
)
_CRT_INSECURE_DEPRECATE(_splitpath_s)
_ACRTIMP void __cdecl _splitpath(
_In_z_ char const* _FullPath,
_Pre_maybenull_ _Post_z_ char* _Drive,
_Pre_maybenull_ _Post_z_ char* _Dir,
_Pre_maybenull_ _Post_z_ char* _Filename,
_Pre_maybenull_ _Post_z_ char* _Ext
);
_Check_return_wat_
_ACRTIMP errno_t __cdecl _splitpath_s(
_In_z_ char const* _FullPath,
_Out_writes_opt_z_(_DriveCount) char* _Drive,
_In_ size_t _DriveCount,
_Out_writes_opt_z_(_DirCount) char* _Dir,
_In_ size_t _DirCount,
_Out_writes_opt_z_(_FilenameCount) char* _Filename,
_In_ size_t _FilenameCount,
_Out_writes_opt_z_(_ExtCount) char* _Ext,
_In_ size_t _ExtCount
);
__DEFINE_CPP_OVERLOAD_SECURE_FUNC_SPLITPATH(errno_t, _splitpath_s, char, _Dest)
#if __STDC_WANT_SECURE_LIB__
_Check_return_opt_
_Success_(return == 0)
_DCRTIMP errno_t __cdecl getenv_s(
_Out_ size_t* _RequiredCount,
_Out_writes_opt_z_(_BufferCount) char* _Buffer,
_In_ rsize_t _BufferCount,
_In_z_ char const* _VarName
);
#endif // __STDC_WANT_SECURE_LIB__
_ACRTIMP int* __cdecl __p___argc (void);
_ACRTIMP char*** __cdecl __p___argv (void);
_ACRTIMP wchar_t*** __cdecl __p___wargv(void);
#ifdef _CRT_DECLARE_GLOBAL_VARIABLES_DIRECTLY
extern int __argc;
extern char** __argv;
extern wchar_t** __wargv;
#else
#define __argc (*__p___argc()) // Pointer to number of command line arguments
#define __argv (*__p___argv()) // Pointer to table of narrow command line arguments
#define __wargv (*__p___wargv()) // Pointer to table of wide command line arguments
#endif
_DCRTIMP char*** __cdecl __p__environ (void);
_DCRTIMP wchar_t*** __cdecl __p__wenviron(void);
#ifndef _CRT_BEST_PRACTICES_USAGE
#define _CRT_V12_LEGACY_FUNCTIONALITY
#endif
#ifndef _CRT_V12_LEGACY_FUNCTIONALITY
// Deprecated symbol: Do not expose environment global pointers unless
// legacy access is specifically requested
#define _environ crt_usage_error__do_not_reference_global_pointer_directly__environ
#define _wenviron crt_usage_error__do_not_reference_global_pointer_directly__wenviron
#else
#define _environ (*__p__environ()) // Pointer to narrow environment table
#define _wenviron (*__p__wenviron()) // Pointer to wide environment table
#endif
// Sizes for buffers used by the getenv/putenv family of functions.
#define _MAX_ENV 32767
#if _CRT_FUNCTIONS_REQUIRED
_Check_return_ _CRT_INSECURE_DEPRECATE(_dupenv_s)
_DCRTIMP char* __cdecl getenv(
_In_z_ char const* _VarName
);
__DEFINE_CPP_OVERLOAD_SECURE_FUNC_1_1(
errno_t, getenv_s,
_Out_ size_t*, _RequiredCount,
char, _Buffer,
_In_z_ char const*, _VarName
)
#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
#pragma push_macro("_dupenv_s")
#undef _dupenv_s
#endif
_Check_return_opt_
_DCRTIMP errno_t __cdecl _dupenv_s(
_Outptr_result_buffer_maybenull_(*_BufferCount) _Outptr_result_maybenull_z_ char** _Buffer,
_Out_opt_ size_t* _BufferCount,
_In_z_ char const* _VarName
);
#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
#pragma pop_macro("_dupenv_s")
#endif
_DCRTIMP int __cdecl system(
_In_opt_z_ char const* _Command
);
// The functions below have declspecs in their declarations in the Windows
// headers, causing PREfast to fire 6540 here
#pragma warning(push)
#pragma warning(disable: 6540)
_Check_return_
_DCRTIMP int __cdecl _putenv(
_In_z_ char const* _EnvString
);
_Check_return_wat_
_DCRTIMP errno_t __cdecl _putenv_s(
_In_z_ char const* _Name,
_In_z_ char const* _Value
);
#pragma warning(pop)
_DCRTIMP errno_t __cdecl _searchenv_s(
_In_z_ char const* _Filename,
_In_z_ char const* _VarName,
_Out_writes_z_(_BufferCount) char* _Buffer,
_In_ size_t _BufferCount
);
__DEFINE_CPP_OVERLOAD_SECURE_FUNC_2_0(
errno_t, _searchenv_s,
_In_z_ char const*, _Filename,
_In_z_ char const*, _VarName,
char, _Buffer
)
__DEFINE_CPP_OVERLOAD_STANDARD_FUNC_2_0(
void, __RETURN_POLICY_VOID, _DCRTIMP, _searchenv,
_In_z_ char const*, _Filename,
_In_z_ char const*, _VarName,
_Pre_notnull_ _Post_z_, char, _Buffer
)
// The Win32 API SetErrorMode, Beep and Sleep should be used instead.
_CRT_OBSOLETE(SetErrorMode)
_DCRTIMP void __cdecl _seterrormode(
_In_ int _Mode
);
_CRT_OBSOLETE(Beep)
_DCRTIMP void __cdecl _beep(
_In_ unsigned _Frequency,
_In_ unsigned _Duration
);
_CRT_OBSOLETE(Sleep)
_DCRTIMP void __cdecl _sleep(
_In_ unsigned long _Duration
);
#endif // _CRT_FUNCTIONS_REQUIRED
//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
//
// Non-ANSI Names for Compatibility
//
//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
#if defined(_CRT_INTERNAL_NONSTDC_NAMES) && _CRT_INTERNAL_NONSTDC_NAMES
#ifndef __cplusplus
#define max(a,b) (((a) > (b)) ? (a) : (b))
#define min(a,b) (((a) < (b)) ? (a) : (b))
#endif
#define sys_errlist _sys_errlist
#define sys_nerr _sys_nerr
#pragma warning(push)
#pragma warning(disable: 4141) // Using deprecated twice
_Check_return_ _CRT_NONSTDC_DEPRECATE(_ecvt) _CRT_INSECURE_DEPRECATE(_ecvt_s)
_ACRTIMP char* __cdecl ecvt(
_In_ double _Value,
_In_ int _DigitCount,
_Out_ int* _PtDec,
_Out_ int* _PtSign
);
_Check_return_ _CRT_NONSTDC_DEPRECATE(_fcvt) _CRT_INSECURE_DEPRECATE(_fcvt_s)
_ACRTIMP char* __cdecl fcvt(
_In_ double _Value,
_In_ int _FractionalDigitCount,
_Out_ int* _PtDec,
_Out_ int* _PtSign
);
_CRT_NONSTDC_DEPRECATE(_gcvt) _CRT_INSECURE_DEPRECATE(_fcvt_s)
_ACRTIMP char* __cdecl gcvt(
_In_ double _Value,
_In_ int _DigitCount,
_Pre_notnull_ _Post_z_ char* _DstBuf
);
_CRT_NONSTDC_DEPRECATE(_itoa) _CRT_INSECURE_DEPRECATE(_itoa_s)
_ACRTIMP char* __cdecl itoa(
_In_ int _Value,
_Pre_notnull_ _Post_z_ char* _Buffer,
_In_ int _Radix
);
_CRT_NONSTDC_DEPRECATE(_ltoa) _CRT_INSECURE_DEPRECATE(_ltoa_s)
_ACRTIMP char* __cdecl ltoa(
_In_ long _Value,
_Pre_notnull_ _Post_z_ char* _Buffer,
_In_ int _Radix
);
_CRT_NONSTDC_DEPRECATE(_swab)
_ACRTIMP void __cdecl swab(
_Inout_updates_z_(_SizeInBytes) char* _Buf1,
_Inout_updates_z_(_SizeInBytes) char* _Buf2,
_In_ int _SizeInBytes
);
_CRT_NONSTDC_DEPRECATE(_ultoa) _CRT_INSECURE_DEPRECATE(_ultoa_s)
_ACRTIMP char* __cdecl ultoa(
_In_ unsigned long _Value,
_Pre_notnull_ _Post_z_ char* _Buffer,
_In_ int _Radix
);
#define environ _environ
_Check_return_ _CRT_NONSTDC_DEPRECATE(_putenv)
_DCRTIMP int __cdecl putenv(
_In_z_ char const* _EnvString
);
#pragma warning(pop)
onexit_t __cdecl onexit(_In_opt_ onexit_t _Func);
#endif // _CRT_INTERNAL_NONSTDC_NAMES
_CRT_END_C_HEADER
_UCRT_RESTORE_CLANG_WARNINGS
#pragma warning(pop) // _UCRT_DISABLED_WARNINGS
#endif // _INC_STDLIB