Changeset 2833 for trunk/kLdr/kLdrHlp.h


Ignore:
Timestamp:
Oct 26, 2006, 2:08:09 AM (19 years ago)
Author:
bird
Message:

Wrote the kLdrDyld verification routines and made it build on win32.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/kLdr/kLdrHlp.h

    r2832 r2833  
    160160
    161161
     162/** @name Parameter validation macros
     163 * @{ */
     164
     165/** Crash validation of a string argument. */
     166#define KLDRHLP_VALIDATE_STRING(str) \
     167    do { strlen(str); } while (0)
     168
     169/** Crash validation of an optional string argument. */
     170#define KLDRHLP_VALIDATE_OPTIONAL_STRING(str) \
     171    do { if (str) { KLDRHLP_VALIDATE_STRING(str); } } while (0)
     172
     173/** Return/Crash validation of an output buffer. */
     174#define KLDRHLP_VALIDATE_BUFFER(buf, cb) \
     175    do { \
     176        if ((cb)) \
     177        { \
     178            uint8_t             __b; \
     179            uint8_t volatile *  __pb = (uint8_t volatile *)(buf); \
     180            size_t              __cbPage1 = 0x1000 - ((uintptr_t)(__pb) & 0xfff); /* ASSUMES page size! */ \
     181            __b = *__pb; *__pb = 0xff; *__pb = __b; \
     182            if ((cb) > __cbPage1) \
     183            { \
     184                size_t  __cb = (cb) - __cbPage1; \
     185                __pb -= __cbPage1; \
     186                for (;;) \
     187                { \
     188                    __b = *__pb; *__pb = 0xff; *__pb = __b; \
     189                    if (__cb < 0x1000) \
     190                        break; \
     191                    __pb += 0x1000; \
     192                    __cb -= 0x1000; \
     193                } \
     194            } \
     195        } \
     196        else \
     197            return KLDR_ERR_INVALID_PARAMETER; \
     198    } while (0)
     199
     200/** Crash validation of an optional output buffer. */
     201#define KLDRHLP_VALIDATE_OPTIONAL_BUFFER(buf, cb) \
     202    do { \
     203        if ((buf) != NULL && (cb) != 0) \
     204        { \
     205            KLDRHLP_VALIDATE_BUFFER(buf, cb); \
     206        } \
     207    } while (0)
     208
     209/** Return validation of an enum argument. */
     210#define KLDRHLP_VALIDATE_ENUM(arg, enumname) \
     211    do { \
     212        if ((arg) <= enumname##_INVALID || (arg) >= enumname##_END) \
     213        {  \
     214            return KLDR_ERR_INVALID_PARAMETER; \
     215        } \
     216    } while (0)
     217
    162218/** @} */
    163219
    164220
     221/** @} */
     222
    165223#endif /* __kLdrHlp_h__ */
    166224
Note: See TracChangeset for help on using the changeset viewer.