Ignore:
Timestamp:
Aug 25, 2007, 7:15:18 PM (18 years ago)
Author:
bird
Message:

Helpers and macros.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/kStuff/include/k/kDefs.h

    r3541 r3545  
    379379#define K_BIT64(bit)            ( KU64_C(1) << (bit))
    380380
    381 /** @} */
    382 
    383 #endif
    384 
     381
     382/** @name Parameter validation macros
     383 * @{ */
     384
     385/** Return/Crash validation of a string argument. */
     386#define K_VALIDATE_STRING(str) \
     387    do { \
     388        if (!K_VALID_PTR(str)) \
     389            return KERR_INVALID_POINTER; \
     390        kHlpStrLen(str); \
     391    } while (0)
     392
     393/** Return/Crash validation of an optional string argument. */
     394#define K_VALIDATE_OPTIONAL_STRING(str) \
     395    do { \
     396        if (str) \
     397            K_VALIDATE_STRING(str); \
     398    } while (0)
     399
     400/** Return/Crash validation of an output buffer. */
     401#define K_VALIDATE_BUFFER(buf, cb) \
     402    do { \
     403        if (!K_VALID_PTR(buf)) \
     404            return KERR_INVALID_POINTER; \
     405        if ((cb) != 0) \
     406        { \
     407            KU8             __b; \
     408            KU8 volatile   *__pb = (KU8 volatile *)(buf); \
     409            KSIZE           __cbPage1 = 0x1000 - ((KUPTR)(__pb) & 0xfff); /* ASSUMES page size! */ \
     410            __b = *__pb; *__pb = 0xff; *__pb = __b; \
     411            if ((cb) > __cbPage1) \
     412            { \
     413                KSIZE __cb = (cb) - __cbPage1; \
     414                __pb -= __cbPage1; \
     415                for (;;) \
     416                { \
     417                    __b = *__pb; *__pb = 0xff; *__pb = __b; \
     418                    if (__cb < 0x1000) \
     419                        break; \
     420                    __pb += 0x1000; \
     421                    __cb -= 0x1000; \
     422                } \
     423            } \
     424        } \
     425        else \
     426            return KERR_INVALID_PARAMETER; \
     427    } while (0)
     428
     429/** Return/Crash validation of an optional output buffer. */
     430#define K_VALIDATE_OPTIONAL_BUFFER(buf, cb) \
     431    do { \
     432        if ((buf) && (cb) != 0) \
     433            K_VALIDATE_BUFFER(buf, cb); \
     434    } while (0)
     435
     436/** Return validation of an enum argument. */
     437#define K_VALIDATE_ENUM(arg, enumname) \
     438    do { \
     439        if ((arg) <= enumname##_INVALID || (arg) >= enumname##_END) \
     440            return KERR_INVALID_PARAMETER; \
     441    } while (0)
     442
     443/** Return validation of a flags argument. */
     444#define K_VALIDATE_FLAGS(arg, AllowedMask) \
     445    do { \
     446        if ((arg) & ~(AllowedMask)) \
     447            return KERR_INVALID_PARAMETER; \
     448    } while (0)
     449
     450/** @} */
     451
     452/** @} */
     453
     454#endif
     455
Note: See TracChangeset for help on using the changeset viewer.