Implemented the debug version of operator new (C++).

This commit is contained in:
Patrik Stridvall 2004-05-18 01:05:36 +00:00 committed by Alexandre Julliard
parent 8f14eb0eb6
commit 5c4420fc4c
8 changed files with 124 additions and 9 deletions

3
configure vendored

File diff suppressed because one or more lines are too long

View File

@ -1580,6 +1580,7 @@ dlls/msvcrt/tests/Makefile
dlls/msvcrt20/Makefile
dlls/msvcrt40/Makefile
dlls/msvcrtd/Makefile
dlls/msvcrtd/tests/Makefile
dlls/msvidc32/Makefile
dlls/msvideo/Makefile
dlls/mswsock/Makefile

View File

@ -3,11 +3,13 @@ TOPOBJDIR = ../..
SRCDIR = @srcdir@
VPATH = @srcdir@
MODULE = msvcrtd.dll
IMPORTS = msvcrt
IMPORTS = msvcrt kernel32
C_SRCS = \
debug.c
SUBDIRS = tests
@MAKE_DLL_RULES@
### Dependencies:

View File

@ -20,16 +20,39 @@
#include "wine/debug.h"
#include "winbase.h"
WINE_DEFAULT_DEBUG_CHANNEL(msvcrt);
int _crtAssertBusy = -1;
int _crtBreakAlloc = -1;
int _crtDbgFlag = 0;
extern int _callnewh(unsigned long);
/*********************************************************************
* ??2@YAPAXIHPBDH@Z (MSVCRTD.@)
*/
void *MSVCRTD_operator_new_dbg(
unsigned long nSize,
int nBlockUse,
const char *szFileName,
int nLine)
{
void *retval = HeapAlloc(GetProcessHeap(), 0, nSize);
TRACE("(%lu, %d, '%s', %d) returning %p\n", nSize, nBlockUse, szFileName, nLine, retval);
if (!retval)
_callnewh(nSize);
return retval;
}
/*********************************************************************
* _CrtSetDumpClient (MSVCRTD.@)
*/
void *_CrtSetDumpClient()
void *_CrtSetDumpClient(void *dumpClient)
{
return NULL;
}
@ -38,7 +61,7 @@ void *_CrtSetDumpClient()
/*********************************************************************
* _CrtSetReportHook (MSVCRTD.@)
*/
void *_CrtSetReportHook()
void *_CrtSetReportHook(void *reportHook)
{
return NULL;
}
@ -47,7 +70,7 @@ void *_CrtSetReportHook()
/*********************************************************************
* _CrtSetReportMode (MSVCRTD.@)
*/
int _CrtSetReportMode()
int _CrtSetReportMode(int reportType, int reportMode)
{
return 0;
}
@ -77,7 +100,8 @@ int _CrtSetDbgFlag(int new)
/*********************************************************************
* _CrtDbgReport (MSVCRTD.@)
*/
int _CrtDbgReport()
int _CrtDbgReport(int reportType, const char *filename, int linenumber,
const char *moduleName, const char *format, ...)
{
return 0;
}

View File

@ -16,7 +16,7 @@
@ cdecl -i386 ??1exception@@UAE@XZ() msvcrt.??1exception@@UAE@XZ
@ cdecl -i386 ??1type_info@@UAE@XZ() msvcrt.??1type_info@@UAE@XZ
@ cdecl ??2@YAPAXI@Z(long) msvcrt.??2@YAPAXI@Z
@ cdecl ??2@YAPAXIHPBDH@Z(long) msvcrt.??2@YAPAXIHPBDH@Z
@ cdecl ??2@YAPAXIHPBDH@Z(long long str long) MSVCRTD_operator_new_dbg
@ cdecl ??3@YAXPAX@Z(ptr) msvcrt.??3@YAXPAX@Z
@ cdecl -i386 ??4__non_rtti_object@@QAEAAV0@ABV0@@Z(ptr) msvcrt.??4__non_rtti_object@@QAEAAV0@ABV0@@Z
@ cdecl -i386 ??4bad_cast@@QAEAAV0@ABV0@@Z(ptr) msvcrt.??4bad_cast@@QAEAAV0@ABV0@@Z
@ -68,7 +68,7 @@
@ cdecl _CItanh() msvcrt._CItanh
@ stub _CrtCheckMemory
@ stub _CrtDbgBreak
@ cdecl _CrtDbgReport(long ptr long ptr ptr)
@ varargs _CrtDbgReport(long ptr long ptr ptr)
@ stub _CrtDoForAllClientObjects
@ cdecl _CrtDumpMemoryLeaks()
@ stub _CrtIsMemoryBlock
@ -85,7 +85,7 @@
@ cdecl _CrtSetDumpClient(ptr)
@ stub _CrtSetReportFile
@ cdecl _CrtSetReportHook(ptr)
@ cdecl _CrtSetReportMode(long)
@ cdecl _CrtSetReportMode(long long)
@ cdecl _CxxThrowException(long long) msvcrt._CxxThrowException
@ cdecl -i386 -norelay _EH_prolog() msvcrt._EH_prolog
@ cdecl _Getdays() msvcrt._Getdays

View File

@ -0,0 +1,3 @@
Makefile
debug.ok
testlist.c

View File

@ -0,0 +1,14 @@
TOPSRCDIR = @top_srcdir@
TOPOBJDIR = ../../..
SRCDIR = @srcdir@
VPATH = @srcdir@
TESTDLL = msvcrtd.dll
IMPORTS = msvcrtd
EXTRAINCL = -I$(TOPSRCDIR)/include/msvcrt
CTESTS = \
debug.c
@MAKE_TEST_RULES@
### Dependencies:

View File

@ -0,0 +1,70 @@
/*
* Unit test suite for debug functions.
*
* Copyright 2004 Patrik Stridvall
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include <stdarg.h>
#include "windef.h"
#include "winbase.h"
#include "winnt.h"
#include "wine/test.h"
/**********************************************************************/
static void * (*pMSVCRTD_operator_new_dbg)(unsigned long, int, const char *, int) = NULL;
/* Some exports are only available in later versions */
#define SETNOFAIL(x,y) x = (void*)GetProcAddress(hModule,y)
#define SET(x,y) SETNOFAIL(x,y); ok(x != NULL, "Export '%s' not found\n", y)
int init_functions(void)
{
HMODULE hModule = LoadLibraryA("msvcrtd.dll");
ok(hModule != NULL, "LoadLibraryA failed\n");
if (!hModule)
return FALSE;
SET(pMSVCRTD_operator_new_dbg, "??2@YAPAXIHPBDH@Z");
if (pMSVCRTD_operator_new_dbg == NULL)
return FALSE;
return TRUE;
}
/**********************************************************************/
void test_new(void)
{
void *mem;
mem = pMSVCRTD_operator_new_dbg(42, 0, __FILE__, __LINE__);
ok(mem != NULL, "memory not allocated\n");
}
/**********************************************************************/
START_TEST(debug)
{
if (!init_functions())
return;
test_new();
}