/*++

Copyright (c) 1997 Microsoft Corporation

Module Name:

    dnsmem.h

Abstract:

    Domain Name System (DNS) Library

    Memory routines declarations.

Author:

    Jim Gilroy (jamesg)     January 1997

Revision History:

--*/

#ifndef _DNS_MEMORY_INCLUDED_
#define _DNS_MEMORY_INCLUDED_



//
//  Ram's leak tracking debug routines
//  Changes made here to be exportable to dns server end

LPVOID
DnsApiAlloc(
    DWORD cb
    );

#if  DBG
LPVOID
DebugDnsApiAlloc(
    CHAR*,
    int,
    DWORD cb
);
#endif

#if  DBG
BOOL
DebugDnsApiFree(
    LPVOID
    );
#endif

BOOL
DnsApiFree(
    LPVOID pMem
    );

//
// Dont care about ReAlloc because it is not exported to server
// side. May need to fix this if this is changed at a future point
//

#if  DBG
LPVOID
DebugDnsApiReAlloc(
    CHAR*,
    int,
    LPVOID pOldMem,
    DWORD cbOld,
    DWORD cbNew
    );
#define  DnsApiReAlloc( pOldMem, cbOld, cbNew ) DebugDnsApiReAlloc( __FILE__, __LINE__, pOldMem, cbOld, cbNew )
#else
LPVOID
DnsApiReAlloc(
    LPVOID pOldMem,
    DWORD cbOld,
    DWORD cbNew
    );
#endif


#if DBG

extern LIST_ENTRY DnsMemList ;
extern CRITICAL_SECTION DnsMemCritSect ;

VOID InitDnsMem(
    VOID
    );

VOID AssertDnsMemLeaks(
    VOID
    );

VOID
DumpMemoryTracker(
    VOID
    );


#else
//
//  non-debug, macroize away heap tracking
//
#define InitDnsMem()
#define AssertDnsMemLeaks()
#define DumpMemoryTracker()
#endif


//
//  DCR:  a better idea is just to call DnsApiHeapReset (if necessary)
//      to install any underlying allocators you want
//
//      then just cover the standard macros for your debug builds
//

#define DNS_ALLOCATE_HEAP(size)              DnsApiAlloc(size)
#define DNS_FREE_HEAP(p)                     DnsApiFree(p)


#endif  //  _DNS_MEMORY_INCLUDED_