In Visual Studio when including crtdbg.h file with both _DEBUG and
_CRTDBG_MAP_ALLOC macros set, all standard memory allocation functions are
redefined and forwarded to their *_dbg siblings. This allows to track
memory allocation in program compiled and linked with debug version of CRT
DLL library.
Add same support also into mingw-w64. This allows to use memory leak
functionality provided by msvcrtd.dll when compiling with gcc's
-mcrtdll=msvcrtd and -D_DEBUG and -D_CRTDBG_MAP_ALLOC switches.
Note that those redefined functions needs macro guards in other header
files to prevent expadning redefined macros when declaring non-debug
functions. For example when declaring void *__cdecl malloc(size_t _Size);
in malloc.h header file, it needs to be ensured that malloc macro from
crtdbg.h #define malloc(s) _malloc_dbg(s,_NORMAL_BLOCK,__FILE__,__LINE__)
does not expad for standard malloc declaration. Same guard technique via
pragma push_macro, undef and pragma pop_macro is used by Visual Studio.
---
mingw-w64-headers/crt/corecrt_wstdlib.h | 10 +++-
mingw-w64-headers/crt/crtdbg.h | 44 ++++++++++++++++
mingw-w64-headers/crt/direct.h | 33 ++++++++++++
mingw-w64-headers/crt/io.h | 15 ++++++
mingw-w64-headers/crt/malloc.h | 67 ++++++++++++++++++++++++
mingw-w64-headers/crt/mbstring.h | 7 +++
mingw-w64-headers/crt/sec_api/stdlib_s.h | 10 +++-
mingw-w64-headers/crt/stdio.h | 21 ++++++++
mingw-w64-headers/crt/stdlib.h | 63 ++++++++++++++++++++++
mingw-w64-headers/crt/string.h | 28 ++++++++++
mingw-w64-headers/crt/wchar.h | 42 +++++++++++++++
11 files changed, 338 insertions(+), 2 deletions(-)
diff --git a/mingw-w64-headers/crt/corecrt_wstdlib.h
b/mingw-w64-headers/crt/corecrt_wstdlib.h
index 6169c2d40ac5..d525397e0970 100644
--- a/mingw-w64-headers/crt/corecrt_wstdlib.h
+++ b/mingw-w64-headers/crt/corecrt_wstdlib.h
@@ -10,6 +10,15 @@
#ifdef __cplusplus
extern "C" {
+#endif
+
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma push_macro("_wdupenv_s")
+#undef _wdupenv_s
+#endif
+ _CRTIMP errno_t __cdecl _wdupenv_s(wchar_t **_Buffer,size_t
*_BufferSizeInWords,const wchar_t *_VarName);
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma pop_macro("_wdupenv_s")
#endif
_CRTIMP errno_t __cdecl _itow_s (int _Val,wchar_t *_DstBuf,size_t
_SizeInWords,int _Radix);
@@ -24,7 +33,6 @@ extern "C" {
_CRTIMP errno_t __cdecl _wgetenv_s(size_t *_ReturnSize,wchar_t
*_DstBuf,size_t _DstSizeInWords,const wchar_t *_VarName);
__DEFINE_CPP_OVERLOAD_SECURE_FUNC_1_1(errno_t,_wgetenv_s,size_t*,_ReturnSize,wchar_t,_DstBuf,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);
diff --git a/mingw-w64-headers/crt/crtdbg.h b/mingw-w64-headers/crt/crtdbg.h
index 4c63d5580a3c..c498bcfa63f0 100644
--- a/mingw-w64-headers/crt/crtdbg.h
+++ b/mingw-w64-headers/crt/crtdbg.h
@@ -331,6 +331,50 @@ _CRTIMP int __cdecl _CrtDbgReportW(int _ReportType, const
wchar_t * _Filename, i
#define _CrtDbgBreak() __debugbreak()
+#ifdef _CRTDBG_MAP_ALLOC
+
+#define malloc(s) _malloc_dbg(s, _NORMAL_BLOCK, __FILE__,
__LINE__)
+#define calloc(c, s) _calloc_dbg(c, s, _NORMAL_BLOCK, __FILE__,
__LINE__)
+#define realloc(p, s) _realloc_dbg(p, s, _NORMAL_BLOCK, __FILE__,
__LINE__)
+#define _recalloc(p, c, s) _recalloc_dbg(p, c, s, _NORMAL_BLOCK,
__FILE__, __LINE__)
+#define _expand(p, s) _expand_dbg(p, s, _NORMAL_BLOCK, __FILE__,
__LINE__)
+#define free(p) _free_dbg(p, _NORMAL_BLOCK)
+#define _msize(p) _msize_dbg(p, _NORMAL_BLOCK)
+#define _aligned_msize(p, a, o) _aligned_msize_dbg(p, a, o)
+#define _aligned_malloc(s, a) _aligned_malloc_dbg(s, a,
__FILE__, __LINE__)
+#define _aligned_realloc(p, s, a) _aligned_realloc_dbg(p, s,
a, __FILE__, __LINE__)
+#define _aligned_recalloc(p, c, s, a) _aligned_recalloc_dbg(p,
c, s, a, __FILE__, __LINE__)
+#define _aligned_offset_malloc(s, a, o)
_aligned_offset_malloc_dbg(s, a, o, __FILE__, __LINE__)
+#define _aligned_offset_realloc(p, s, a, o)
_aligned_offset_realloc_dbg(p, s, a, o, __FILE__, __LINE__)
+#define _aligned_offset_recalloc(p, c, s, a, o)
_aligned_offset_recalloc_dbg(p, c, s, a, o, __FILE__, __LINE__)
+#define _aligned_free(p) _aligned_free_dbg(p)
+
+#define _malloca(s) _malloca_dbg(s, _NORMAL_BLOCK, __FILE__, __LINE__)
+#define _freea(p) _freea_dbg(p, _NORMAL_BLOCK)
+
+#define _strdup(s) _strdup_dbg(s, _NORMAL_BLOCK, __FILE__, __LINE__)
+#define _wcsdup(s) _wcsdup_dbg(s, _NORMAL_BLOCK, __FILE__, __LINE__)
+#define _mbsdup(s) _strdup_dbg(s, _NORMAL_BLOCK, __FILE__, __LINE__)
+#define _tempnam(s1, s2) _tempnam_dbg(s1, s2, _NORMAL_BLOCK, __FILE__,
__LINE__)
+#define _wtempnam(s1, s2) _wtempnam_dbg(s1, s2, _NORMAL_BLOCK, __FILE__,
__LINE__)
+#define _fullpath(s1, s2, le) _fullpath_dbg(s1, s2, le, _NORMAL_BLOCK,
__FILE__, __LINE__)
+#define _wfullpath(s1, s2, le) _wfullpath_dbg(s1, s2, le, _NORMAL_BLOCK,
__FILE__, __LINE__)
+#define _getcwd(s, le) _getcwd_dbg(s, le, _NORMAL_BLOCK, __FILE__,
__LINE__)
+#define _wgetcwd(s, le) _wgetcwd_dbg(s, le, _NORMAL_BLOCK, __FILE__,
__LINE__)
+#define _getdcwd(d, s, le) _getdcwd_dbg(d, s, le, _NORMAL_BLOCK, __FILE__,
__LINE__)
+#define _wgetdcwd(d, s, le) _wgetdcwd_dbg(d, s, le, _NORMAL_BLOCK, __FILE__,
__LINE__)
+#define _getdcwd_nolock(d, s, le) _getdcwd_lk_dbg(d, s, le,
_NORMAL_BLOCK, __FILE__, __LINE__)
+#define _wgetdcwd_nolock(d, s, le) _wgetdcwd_lk_dbg(d, s, le,
_NORMAL_BLOCK, __FILE__, __LINE__)
+#define _dupenv_s(ps1, size, s2) _dupenv_s_dbg(ps1, size, s2,
_NORMAL_BLOCK, __FILE__, __LINE__)
+#define _wdupenv_s(ps1, size, s2) _wdupenv_s_dbg(ps1, size, s2,
_NORMAL_BLOCK, __FILE__, __LINE__)
+
+#define strdup(s) _strdup_dbg(s, _NORMAL_BLOCK, __FILE__, __LINE__)
+#define wcsdup(s) _wcsdup_dbg(s, _NORMAL_BLOCK, __FILE__, __LINE__)
+#define tempnam(s1, s2) _tempnam_dbg(s1, s2, _NORMAL_BLOCK, __FILE__,
__LINE__)
+#define getcwd(s, le) _getcwd_dbg(s, le, _NORMAL_BLOCK, __FILE__,
__LINE__)
+
+#endif /* _CRTDBG_MAP_ALLOC */
+
_CRTIMP long * __cdecl __p__crtBreakAlloc(void);
#define _crtBreakAlloc (*__p__crtBreakAlloc())
diff --git a/mingw-w64-headers/crt/direct.h b/mingw-w64-headers/crt/direct.h
index e6d95f271025..df53e95f2d72 100644
--- a/mingw-w64-headers/crt/direct.h
+++ b/mingw-w64-headers/crt/direct.h
@@ -25,10 +25,23 @@ extern "C" {
};
#endif
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma push_macro("_getcwd")
+#undef _getcwd
+#pragma push_macro("_getdcwd")
+#undef _getdcwd
+#pragma push_macro("_getdcwd_nolock")
+#undef _getdcwd_nolock
+#endif
_CRTIMP char *__cdecl _getcwd(char *_DstBuf,int _SizeInBytes);
_CRTIMP char *__cdecl _getdcwd(int _Drive,char *_DstBuf,int _SizeInBytes);
#if __MSVCRT_VERSION__ >= 0x800
char *__cdecl _getdcwd_nolock(int _Drive,char *_DstBuf,int _SizeInBytes);
+#endif
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma pop_macro("_getcwd")
+#pragma pop_macro("_getdcwd")
+#pragma pop_macro("_getdcwd_nolock")
#endif
_CRTIMP int __cdecl _chdir(const char *_Path);
_CRTIMP int __cdecl _mkdir(const char *_Path);
@@ -46,10 +59,23 @@ extern "C" {
#ifndef _WDIRECT_DEFINED
#define _WDIRECT_DEFINED
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma push_macro("_wgetcwd")
+#undef _wgetcwd
+#pragma push_macro("_wgetdcwd")
+#undef _wgetdcwd
+#pragma push_macro("_wgetdcwd_nolock")
+#undef _wgetdcwd_nolock
+#endif
_CRTIMP wchar_t *__cdecl _wgetcwd(wchar_t *_DstBuf,int _SizeInWords);
_CRTIMP wchar_t *__cdecl _wgetdcwd(int _Drive,wchar_t *_DstBuf,int
_SizeInWords);
#if __MSVCRT_VERSION__ >= 0x800
wchar_t *__cdecl _wgetdcwd_nolock(int _Drive,wchar_t *_DstBuf,int
_SizeInWords);
+#endif
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma pop_macro("_wgetcwd")
+#pragma pop_macro("_wgetdcwd")
+#pragma pop_macro("_wgetdcwd_nolock")
#endif
_CRTIMP int __cdecl _wchdir(const wchar_t *_Path);
_CRTIMP int __cdecl _wmkdir(const wchar_t *_Path);
@@ -60,7 +86,14 @@ extern "C" {
#define diskfree_t _diskfree_t
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma push_macro("getcwd")
+#undef getcwd
+#endif
char *__cdecl getcwd(char *_DstBuf,int _SizeInBytes)
__MINGW_ATTRIB_DEPRECATED_MSVC2005;
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma pop_macro("getcwd")
+#endif
int __cdecl chdir(const char *_Path) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
int __cdecl mkdir(const char *_Path) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
int __cdecl rmdir(const char *_Path) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
diff --git a/mingw-w64-headers/crt/io.h b/mingw-w64-headers/crt/io.h
index 4994191a967d..a6dc2f8a1bb2 100644
--- a/mingw-w64-headers/crt/io.h
+++ b/mingw-w64-headers/crt/io.h
@@ -24,7 +24,15 @@
extern "C" {
#endif
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma push_macro("_getcwd")
+#undef _getcwd
+#endif
_CRTIMP char* __cdecl _getcwd (char*, int);
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma pop_macro("_getcwd")
+#endif
+
#ifndef _FSIZE_T_DEFINED
typedef unsigned long _fsize_t;
#define _FSIZE_T_DEFINED
@@ -278,7 +286,14 @@ _CRTIMP char* __cdecl _getcwd (char*, int);
#ifndef NO_OLDNAMES
#ifndef _UWIN
int __cdecl chdir (const char *) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma push_macro("getcwd")
+#undef getcwd
+#endif
char *__cdecl getcwd (char *, int) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma pop_macro("getcwd")
+#endif
int __cdecl mkdir (const char *) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
char *__cdecl mktemp(char *) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
int __cdecl rmdir (const char*) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
diff --git a/mingw-w64-headers/crt/malloc.h b/mingw-w64-headers/crt/malloc.h
index d02f3ee7bf5c..9c498c2918bd 100644
--- a/mingw-w64-headers/crt/malloc.h
+++ b/mingw-w64-headers/crt/malloc.h
@@ -61,6 +61,36 @@ extern "C" {
#ifndef _CRT_ALLOCATION_DEFINED
#define _CRT_ALLOCATION_DEFINED
+
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma push_macro("calloc")
+#undef calloc
+#pragma push_macro("free")
+#undef free
+#pragma push_macro("malloc")
+#undef malloc
+#pragma push_macro("realloc")
+#undef realloc
+#pragma push_macro("_aligned_free")
+#undef _aligned_free
+#pragma push_macro("_aligned_malloc")
+#undef _aligned_malloc
+#pragma push_macro("_aligned_offset_malloc")
+#undef _aligned_offset_malloc
+#pragma push_macro("_aligned_realloc")
+#undef _aligned_realloc
+#pragma push_macro("_aligned_offset_realloc")
+#undef _aligned_offset_realloc
+#pragma push_macro("_recalloc")
+#undef _recalloc
+#pragma push_macro("_aligned_recalloc")
+#undef _aligned_recalloc
+#pragma push_macro("_aligned_offset_recalloc")
+#undef _aligned_offset_recalloc
+#pragma push_macro("_aligned_msize")
+#undef _aligned_msize
+#endif
+
void *__cdecl calloc(size_t _NumOfElements,size_t _SizeOfElements);
void __cdecl free(void *_Memory);
void *__cdecl malloc(size_t _Size);
@@ -78,6 +108,23 @@ extern "C" {
_CRTIMP void *__cdecl _aligned_offset_recalloc(void *_Memory,size_t
_Count,size_t _Size,size_t _Alignment,size_t _Offset);
_CRTIMP size_t __cdecl _aligned_msize(void *_Memory,size_t _Alignment,size_t
_Offset);
# endif
+
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma pop_macro("calloc")
+#pragma pop_macro("free")
+#pragma pop_macro("malloc")
+#pragma pop_macro("realloc")
+#pragma pop_macro("_aligned_free")
+#pragma pop_macro("_aligned_malloc")
+#pragma pop_macro("_aligned_offset_malloc")
+#pragma pop_macro("_aligned_realloc")
+#pragma pop_macro("_aligned_offset_realloc")
+#pragma pop_macro("_recalloc")
+#pragma pop_macro("_aligned_recalloc")
+#pragma pop_macro("_aligned_offset_recalloc")
+#pragma pop_macro("_aligned_msize")
+#endif
+
#endif
/* Users should really use MS provided versions */
@@ -98,8 +145,19 @@ void * __mingw_aligned_realloc (void *_Memory, size_t
_Size, size_t _Offset);
#endif /* _CRT_USE_WINAPI_FAMILY_DESKTOP_APP */
_CRTIMP unsigned long __cdecl _set_malloc_crt_max_wait(unsigned long
_NewValue);
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma push_macro("_expand")
+#undef _expand
+#pragma push_macro("_msize")
+#undef _msize
+#endif
_CRTIMP void *__cdecl _expand(void *_Memory,size_t _NewSize);
_CRTIMP size_t __cdecl _msize(void *_Memory);
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma pop_macro("_expand")
+#pragma pop_macro("_msize")
+#endif
+
#ifdef __GNUC__
#undef _alloca
#define _alloca(x) __builtin_alloca((x))
@@ -138,11 +196,20 @@ void * __mingw_aligned_realloc (void *_Memory, size_t
_Size, size_t _Offset);
}
#endif
+#ifdef _DEBUG
+#ifndef _CRTDBG_MAP_ALLOC
+#undef _malloca
+#define _malloca(size) \
+ _MarkAllocaS(malloc((size) + _ALLOCA_S_MARKER_SIZE), _ALLOCA_S_HEAP_MARKER)
+#endif
+#else
#undef _malloca
#define _malloca(size) \
((((size) + _ALLOCA_S_MARKER_SIZE) <= _ALLOCA_S_THRESHOLD) ? \
_MarkAllocaS(_alloca((size) +
_ALLOCA_S_MARKER_SIZE),_ALLOCA_S_STACK_MARKER) : \
_MarkAllocaS(malloc((size) + _ALLOCA_S_MARKER_SIZE),_ALLOCA_S_HEAP_MARKER))
+#endif
+
#undef _FREEA_INLINE
#define _FREEA_INLINE
diff --git a/mingw-w64-headers/crt/mbstring.h b/mingw-w64-headers/crt/mbstring.h
index b6e48a883992..e9e43a13a1e1 100644
--- a/mingw-w64-headers/crt/mbstring.h
+++ b/mingw-w64-headers/crt/mbstring.h
@@ -31,7 +31,14 @@ extern "C" {
#ifndef _MBSTRING_DEFINED
#define _MBSTRING_DEFINED
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma push_macro("_mbsdup")
+#undef _mbsdup
+#endif
_CRTIMP unsigned char *__cdecl _mbsdup(const unsigned char *_Str);
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma pop_macro("_mbsdup")
+#endif
_CRTIMP unsigned int __cdecl _mbbtombc(unsigned int _Ch);
_CRTIMP unsigned int __cdecl _mbbtombc_l(unsigned int _Ch,_locale_t _Locale);
_CRTIMP int __cdecl _mbbtype(unsigned char _Ch,int _CType);
diff --git a/mingw-w64-headers/crt/sec_api/stdlib_s.h
b/mingw-w64-headers/crt/sec_api/stdlib_s.h
index f7d76fecb165..32f4767e4d49 100644
--- a/mingw-w64-headers/crt/sec_api/stdlib_s.h
+++ b/mingw-w64-headers/crt/sec_api/stdlib_s.h
@@ -12,8 +12,16 @@
extern "C" {
#endif
- _CRTIMP void * __cdecl bsearch_s(const void *_Key,const void *_Base,rsize_t
_NumOfElements,rsize_t _SizeOfElements,int (__cdecl * _PtFuncCompare)(void *,
const void *, const void *), void *_Context);
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma push_macro("_dupenv_s")
+#undef _dupenv_s
+#endif
_CRTIMP errno_t __cdecl _dupenv_s(char **_PBuffer,size_t
*_PBufferSizeInBytes,const char *_VarName);
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma pop_macro("_dupenv_s")
+#endif
+
+ _CRTIMP void * __cdecl bsearch_s(const void *_Key,const void *_Base,rsize_t
_NumOfElements,rsize_t _SizeOfElements,int (__cdecl * _PtFuncCompare)(void *,
const void *, const void *), void *_Context);
_CRTIMP errno_t __cdecl getenv_s(size_t *_ReturnSize,char *_DstBuf,rsize_t
_DstSize,const char *_VarName);
__DEFINE_CPP_OVERLOAD_SECURE_FUNC_1_1(errno_t, getenv_s, size_t *,
_ReturnSize, char, _Dest, const char *, _VarName)
_CRTIMP errno_t __cdecl _itoa_s(int _Value,char *_DstBuf,size_t _Size,int
_Radix);
diff --git a/mingw-w64-headers/crt/stdio.h b/mingw-w64-headers/crt/stdio.h
index d6227f689868..7e0d3d9175f0 100644
--- a/mingw-w64-headers/crt/stdio.h
+++ b/mingw-w64-headers/crt/stdio.h
@@ -540,8 +540,15 @@ int vsnprintf (char *__stream, size_t __n, const char
*__format, __builtin_va_li
_CRTIMP int __cdecl _fileno(FILE *_File);
#ifdef _POSIX_
int __cdecl fileno(FILE *_File) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
+#endif
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma push_macro("_tempnam")
+#undef _tempnam
#endif
_CRTIMP char *__cdecl _tempnam(const char *_DirName,const char *_FilePrefix);
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma pop_macro("_tempnam")
+#endif
_CRTIMP int __cdecl _flushall(void);
FILE *__cdecl fopen(const char * __restrict__ _Filename,const char *
__restrict__ _Mode) __MINGW_ATTRIB_DEPRECATED_SEC_WARN;
FILE *fopen64(const char * __restrict__ filename,const char * __restrict__
mode);
@@ -1309,7 +1316,14 @@ int vsnwprintf (wchar_t *__stream, size_t __n, const
wchar_t *__format, __builti
#endif
#endif
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma push_macro("_wtempnam")
+#undef _wtempnam
+#endif
_CRTIMP wchar_t *__cdecl _wtempnam(const wchar_t *_Directory,const wchar_t
*_FilePrefix);
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma pop_macro("_wtempnam")
+#endif
_CRTIMP int __cdecl _snwscanf(const wchar_t * __restrict__ _Src,size_t
_MaxCount,const wchar_t * __restrict__ _Format,...);
_CRTIMP FILE *__cdecl _wfdopen(int _FileHandle ,const wchar_t *_Mode);
_CRTIMP FILE *__cdecl _wfopen(const wchar_t * __restrict__ _Filename,const
wchar_t *__restrict__ _Mode) __MINGW_ATTRIB_DEPRECATED_SEC_WARN;
@@ -1387,7 +1401,14 @@ int vsnwprintf (wchar_t *__stream, size_t __n, const
wchar_t *__format, __builti
#define P_tmpdir _P_tmpdir
#define SYS_OPEN _SYS_OPEN
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma push_macro("tempnam")
+#undef tempnam
+#endif
char *__cdecl tempnam(const char *_Directory,const char *_FilePrefix)
__MINGW_ATTRIB_DEPRECATED_MSVC2005;
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma pop_macro("tempnam")
+#endif
int __cdecl fcloseall(void) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
FILE *__cdecl fdopen(int _FileHandle,const char *_Format)
__MINGW_ATTRIB_DEPRECATED_MSVC2005;
int __cdecl fgetchar(void) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
diff --git a/mingw-w64-headers/crt/stdlib.h b/mingw-w64-headers/crt/stdlib.h
index dabeb3cdb61a..d43fa33b7f2c 100644
--- a/mingw-w64-headers/crt/stdlib.h
+++ b/mingw-w64-headers/crt/stdlib.h
@@ -419,6 +419,36 @@ float __cdecl __MINGW_NOTHROW strtof(const char *
__restrict__ _Str,char ** __re
#ifndef _CRT_ALLOCATION_DEFINED
#define _CRT_ALLOCATION_DEFINED
+
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma push_macro("calloc")
+#undef calloc
+#pragma push_macro("free")
+#undef free
+#pragma push_macro("malloc")
+#undef malloc
+#pragma push_macro("realloc")
+#undef realloc
+#pragma push_macro("_aligned_free")
+#undef _aligned_free
+#pragma push_macro("_aligned_malloc")
+#undef _aligned_malloc
+#pragma push_macro("_aligned_offset_malloc")
+#undef _aligned_offset_malloc
+#pragma push_macro("_aligned_realloc")
+#undef _aligned_realloc
+#pragma push_macro("_aligned_offset_realloc")
+#undef _aligned_offset_realloc
+#pragma push_macro("_recalloc")
+#undef _recalloc
+#pragma push_macro("_aligned_recalloc")
+#undef _aligned_recalloc
+#pragma push_macro("_aligned_offset_recalloc")
+#undef _aligned_offset_recalloc
+#pragma push_macro("_aligned_msize")
+#undef _aligned_msize
+#endif
+
void *__cdecl calloc(size_t _NumOfElements,size_t _SizeOfElements);
void __cdecl free(void *_Memory);
void *__cdecl malloc(size_t _Size);
@@ -434,6 +464,23 @@ float __cdecl __MINGW_NOTHROW strtof(const char *
__restrict__ _Str,char ** __re
_CRTIMP void *__cdecl _aligned_offset_recalloc(void *_Memory,size_t
_Count,size_t _Size,size_t _Alignment,size_t _Offset);
_CRTIMP size_t __cdecl _aligned_msize(void *_Memory,size_t _Alignment,size_t
_Offset);
# endif
+
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma pop_macro("calloc")
+#pragma pop_macro("free")
+#pragma pop_macro("malloc")
+#pragma pop_macro("realloc")
+#pragma pop_macro("_aligned_free")
+#pragma pop_macro("_aligned_malloc")
+#pragma pop_macro("_aligned_offset_malloc")
+#pragma pop_macro("_aligned_realloc")
+#pragma pop_macro("_aligned_offset_realloc")
+#pragma pop_macro("_recalloc")
+#pragma pop_macro("_aligned_recalloc")
+#pragma pop_macro("_aligned_offset_recalloc")
+#pragma pop_macro("_aligned_msize")
+#endif
+
#endif
#ifndef _WSTDLIB_DEFINED
@@ -497,7 +544,16 @@ float __cdecl __MINGW_NOTHROW strtof(const char *
__restrict__ _Str,char ** __re
#ifndef _POSIX_
#define _CVTBUFSIZE (309+40)
+
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma push_macro("_fullpath")
+#undef _fullpath
+#endif
_CRTIMP char *__cdecl _fullpath(char *_FullPath,const char *_Path,size_t
_SizeInBytes);
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma pop_macro("_fullpath")
+#endif
+
_CRTIMP char *__cdecl _ecvt(double _Val,int _NumOfDigits,int *_PtDec,int
*_PtSign) __MINGW_ATTRIB_DEPRECATED_SEC_WARN;
_CRTIMP char *__cdecl _fcvt(double _Val,int _NumOfDec,int *_PtDec,int
*_PtSign) __MINGW_ATTRIB_DEPRECATED_SEC_WARN;
_CRTIMP char *__cdecl _gcvt(double _Val,int _NumOfDigits,char *_DstBuf)
__MINGW_ATTRIB_DEPRECATED_SEC_WARN;
@@ -559,7 +615,14 @@ unsigned long __cdecl _lrotr(unsigned long,int);
#ifndef _WSTDLIBP_DEFINED
#define _WSTDLIBP_DEFINED
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma push_macro("_wfullpath")
+#undef _wfullpath
+#endif
_CRTIMP wchar_t *__cdecl _wfullpath(wchar_t *_FullPath,const wchar_t
*_Path,size_t _SizeInWords);
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma pop_macro("_wfullpath")
+#endif
_CRTIMP void __cdecl _wmakepath(wchar_t *_ResultPath,const wchar_t
*_Drive,const wchar_t *_Dir,const wchar_t *_Filename,const wchar_t *_Ext);
#ifndef _CRT_WPERROR_DEFINED
#define _CRT_WPERROR_DEFINED
diff --git a/mingw-w64-headers/crt/string.h b/mingw-w64-headers/crt/string.h
index 813cd5bec593..1832e38ed85a 100644
--- a/mingw-w64-headers/crt/string.h
+++ b/mingw-w64-headers/crt/string.h
@@ -64,7 +64,14 @@ extern "C" {
size_t __cdecl strlen(const char *_Str);
size_t __cdecl strnlen(const char *_Str,size_t _MaxCount);
void *__cdecl memmove(void *_Dst,const void *_Src,size_t _Size)
__MINGW_ATTRIB_DEPRECATED_SEC_WARN;
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma push_macro("_strdup")
+#undef _strdup
+#endif
_CRTIMP char *__cdecl _strdup(const char *_Src);
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma pop_macro("_strdup")
+#endif
_CONST_RETURN char *__cdecl strchr(const char *_Str,int _Val);
_CRTIMP int __cdecl _stricmp(const char *_Str1,const char *_Str2);
_CRTIMP int __cdecl _strcmpi(const char *_Str1,const char *_Str2);
@@ -105,7 +112,14 @@ extern "C" {
_CRTIMP size_t __cdecl _strxfrm_l(char * __restrict__ _Dst,const char *
__restrict__ _Src,size_t _MaxCount,_locale_t _Locale);
#ifndef NO_OLDNAMES
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma push_macro("strdup")
+#undef strdup
+#endif
char *__cdecl strdup(const char *_Src) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma pop_macro("strdup")
+#endif
int __cdecl strcmpi(const char *_Str1,const char *_Str2)
__MINGW_ATTRIB_DEPRECATED_MSVC2005;
int __cdecl stricmp(const char *_Str1,const char *_Str2)
__MINGW_ATTRIB_DEPRECATED_MSVC2005;
char *__cdecl strlwr(char *_Str) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
@@ -128,7 +142,14 @@ extern "C" {
#ifndef _WSTRING_DEFINED
#define _WSTRING_DEFINED
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma push_macro("_wcsdup")
+#undef _wcsdup
+#endif
_CRTIMP wchar_t *__cdecl _wcsdup(const wchar_t *_Str);
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma pop_macro("_wcsdup")
+#endif
wchar_t *__cdecl wcscat(wchar_t * __restrict__ _Dest,const wchar_t *
__restrict__ _Source) __MINGW_ATTRIB_DEPRECATED_SEC_WARN;
_CONST_RETURN wchar_t *__cdecl wcschr(const wchar_t *_Str,wchar_t _Ch);
int __cdecl wcscmp(const wchar_t *_Str1,const wchar_t *_Str2);
@@ -177,7 +198,14 @@ extern "C" {
_CRTIMP int __cdecl _wcsnicoll_l(const wchar_t *_Str1,const wchar_t
*_Str2,size_t _MaxCount,_locale_t _Locale);
#ifndef NO_OLDNAMES
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma push_macro("wcsdup")
+#undef wcsdup
+#endif
wchar_t *__cdecl wcsdup(const wchar_t *_Str)
__MINGW_ATTRIB_DEPRECATED_MSVC2005;
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma pop_macro("wcsdup")
+#endif
#define wcswcs wcsstr
int __cdecl wcsicmp(const wchar_t *_Str1,const wchar_t *_Str2)
__MINGW_ATTRIB_DEPRECATED_MSVC2005;
int __cdecl wcsnicmp(const wchar_t *_Str1,const wchar_t *_Str2,size_t
_MaxCount) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
diff --git a/mingw-w64-headers/crt/wchar.h b/mingw-w64-headers/crt/wchar.h
index 29323a6d95c6..34df93ec2470 100644
--- a/mingw-w64-headers/crt/wchar.h
+++ b/mingw-w64-headers/crt/wchar.h
@@ -253,10 +253,23 @@ _CRTIMP FILE *__cdecl __acrt_iob_func(unsigned index);
#ifndef _WDIRECT_DEFINED
#define _WDIRECT_DEFINED
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma push_macro("_wgetcwd")
+#undef _wgetcwd
+#pragma push_macro("_wgetdcwd")
+#undef _wgetdcwd
+#pragma push_macro("_wgetdcwd_nolock")
+#undef _wgetdcwd_nolock
+#endif
_CRTIMP wchar_t *__cdecl _wgetcwd(wchar_t *_DstBuf,int _SizeInWords);
_CRTIMP wchar_t *__cdecl _wgetdcwd(int _Drive,wchar_t *_DstBuf,int
_SizeInWords);
#if __MSVCRT_VERSION__ >= 0x800
wchar_t *__cdecl _wgetdcwd_nolock(int _Drive,wchar_t *_DstBuf,int
_SizeInWords);
+#endif
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma pop_macro("_wgetcwd")
+#pragma pop_macro("_wgetdcwd")
+#pragma pop_macro("_wgetdcwd_nolock")
#endif
_CRTIMP int __cdecl _wchdir(const wchar_t *_Path);
_CRTIMP int __cdecl _wmkdir(const wchar_t *_Path);
@@ -1117,7 +1130,15 @@ __MINGW_ASM_CALL(__mingw_vsnwprintf);
#endif
#endif
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma push_macro("_wtempnam")
+#undef _wtempnam
+#endif
_CRTIMP wchar_t *__cdecl _wtempnam(const wchar_t *_Directory,const wchar_t
*_FilePrefix);
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma pop_macro("_wtempnam")
+#endif
+
#ifndef _UCRT
_CRTIMP int __cdecl _vscwprintf(const wchar_t * __restrict__ _Format,va_list
_ArgList);
_CRTIMP int __cdecl _vscwprintf_l(const wchar_t * __restrict__
_Format,_locale_t _Locale,va_list _ArgList);
@@ -1223,7 +1244,14 @@ __MINGW_ASM_CALL(__mingw_vsnwprintf);
#ifndef _POSIX_
#ifndef _WSTDLIBP_DEFINED
#define _WSTDLIBP_DEFINED
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma push_macro("_wfullpath")
+#undef _wfullpath
+#endif
_CRTIMP wchar_t *__cdecl _wfullpath(wchar_t *_FullPath,const wchar_t
*_Path,size_t _SizeInWords);
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma pop_macro("_wfullpath")
+#endif
_CRTIMP void __cdecl _wmakepath(wchar_t *_ResultPath,const wchar_t
*_Drive,const wchar_t *_Dir,const wchar_t *_Filename,const wchar_t *_Ext);
#ifndef _CRT_WPERROR_DEFINED
#define _CRT_WPERROR_DEFINED
@@ -1237,7 +1265,14 @@ __MINGW_ASM_CALL(__mingw_vsnwprintf);
#ifndef _WSTRING_DEFINED
#define _WSTRING_DEFINED
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma push_macro("_wcsdup")
+#undef _wcsdup
+#endif
_CRTIMP wchar_t *__cdecl _wcsdup(const wchar_t *_Str);
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma pop_macro("_wcsdup")
+#endif
wchar_t *__cdecl wcscat(wchar_t * __restrict__ _Dest,const wchar_t *
__restrict__ _Source) __MINGW_ATTRIB_DEPRECATED_SEC_WARN;
_CONST_RETURN wchar_t *__cdecl wcschr(const wchar_t *_Str,wchar_t _Ch);
int __cdecl wcscmp(const wchar_t *_Str1,const wchar_t *_Str2);
@@ -1286,7 +1321,14 @@ __MINGW_ASM_CALL(__mingw_vsnwprintf);
_CRTIMP int __cdecl _wcsnicoll_l(const wchar_t *_Str1,const wchar_t
*_Str2,size_t _MaxCount,_locale_t _Locale);
#ifndef NO_OLDNAMES
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma push_macro("wcsdup")
+#undef wcsdup
+#endif
wchar_t *__cdecl wcsdup(const wchar_t *_Str)
__MINGW_ATTRIB_DEPRECATED_MSVC2005;
+#if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
+#pragma pop_macro("wcsdup")
+#endif
#define wcswcs wcsstr
int __cdecl wcsicmp(const wchar_t *_Str1,const wchar_t *_Str2)
__MINGW_ATTRIB_DEPRECATED_MSVC2005;
int __cdecl wcsnicmp(const wchar_t *_Str1,const wchar_t *_Str2,size_t
_MaxCount) __MINGW_ATTRIB_DEPRECATED_MSVC2005;
--
2.20.1
_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public