Leaked source code of windows server 2003
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.
 
 
 
 
 
 

89 lines
2.3 KiB

/*++
Copyright (c) 1999-2001 Microsoft Corporation
All rights reserved.
Module Name:
gldebug.h
Abstract:
Macros used for debugging purposes
Environment:
Windows NT printer drivers
Revision History:
03/16/96 -davidx-
Created it.
--*/
#ifndef _GLDEBUG_H_
#define _GLDEBUG_H_
#include "debug.h"
///////////////////////////////////////////////////////////////////////////
// REQUIRE macros
//
// REQUIRE_VALID_POINTER(ptr, err, exitclause)
//
// General purpose macro to check pointer, set last error and bug out with
// the given exit clause.
//
// REQUIRE_VALID_ALLOC(ptr, exitclause)
//
// Special case version of REQIRE_VALID_POINTER for use when allocating mem.
//
// REQUIRE_VALID_DATA(ptr, exitclause)
//
// Special case version of REQUIRE_VALID_POINTER for use when checking a
// data pointer.
//
// These macros are meant as an alternative to the use of ASSERT (which
// behaves differently in DBG and release modes). For simple pointer
// checking of parameters and allocations use these macros in the
// following ways:
//
// void Foo(ISomeType *pSome)
// {
// // Example #1: no return type--use "return" for pSome exit clause
// REQUIRE_VALID_DATA(pSome, return);
// //...
// }
//
// HRESULT Bar(ISomeType *pSome)
// {
// // Example #2: return a value--use desired value with return
// REQUIRE_VALID_DATA(pSome, return E_POINTER);
//
// // Example #3: use other macro for allocations
// PBYTE pData = (PBYTE) MemAlloc(CHUNK_O_DATA);
// REQUIRE_VALID_ALLOC(pData, return E_OUTOFMEMORY);
//
// HRESULT hRet = S_OK;
// switch(pSome->m_bleah)
// {
// case SNAFU:
// ISomeType *pGump = GetSomething();
// // Example #4: use assignment and break for exit clause
// REQUIRE_VALID_DATA(pGump, hRet = E_FAIL; break);
// break;
// }
// return hRet;
// }
//
///////////////////////////////////////////////////////////////////////////
#define REQUIRE_VALID_POINTER(ptr, err, exitclause) { if ( !(ptr) ) { SetLastError(err); exitclause; } }
#define REQUIRE_VALID_ALLOC(ptr, exitclause) REQUIRE_VALID_POINTER(ptr, ERROR_OUTOFMEMORY, exitclause)
#define REQUIRE_VALID_DATA(ptr, exitclause) REQUIRE_VALID_POINTER(ptr, ERROR_INVALID_DATA, exitclause)
#endif // !_GLDEBUG_H_