|
|
|
@ -297,15 +297,32 @@ typedef PageHeaderData *PageHeader; |
|
|
|
|
#define PageGetSpecialSize(page) \ |
|
|
|
|
((uint16) (PageGetPageSize(page) - ((PageHeader)(page))->pd_special)) |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Using assertions, validate that the page special pointer is OK. |
|
|
|
|
* |
|
|
|
|
* This is intended to catch use of the pointer before page initialization. |
|
|
|
|
* It is implemented as a function do to the limitations of the MSVC compiler, |
|
|
|
|
* which choked on doing all these tests within another macro. We return true |
|
|
|
|
* so that MacroAssert() can be used while still getting the specifics from |
|
|
|
|
* the macro failure within this function. |
|
|
|
|
*/ |
|
|
|
|
static inline bool |
|
|
|
|
PageValidateSpecialPointer(Page page) |
|
|
|
|
{ |
|
|
|
|
Assert(PageIsValid(page)); |
|
|
|
|
Assert(((PageHeader) (page))->pd_special <= BLCKSZ); |
|
|
|
|
Assert(((PageHeader) (page))->pd_special >= SizeOfPageHeaderData); |
|
|
|
|
|
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* PageGetSpecialPointer |
|
|
|
|
* Returns pointer to special space on a page. |
|
|
|
|
*/ |
|
|
|
|
#define PageGetSpecialPointer(page) \ |
|
|
|
|
( \
|
|
|
|
|
AssertMacro(PageIsValid(page)), \
|
|
|
|
|
AssertMacro(((PageHeader) (page))->pd_special <= BLCKSZ), \
|
|
|
|
|
AssertMacro(((PageHeader) (page))->pd_special >= SizeOfPageHeaderData), \
|
|
|
|
|
AssertMacro(PageValidateSpecialPointer(page)), \
|
|
|
|
|
(char *) ((char *) (page) + ((PageHeader) (page))->pd_special) \
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
|