-#ifndef __OVERUNDERFLOWCHECK__
-#define __OVERUNDERFLOWCHECK__
-
-inline uint32 CheckUInt32Add(uint32 a, uint32 b)
-{
- uint32 c = a + b;
- if (c < a)
- {
- CssmError::throwMe(CSSMERR_DL_DATABASE_CORRUPT);
- }
-
- return c;
-}
-
-
-
-inline uint32 CheckUInt32Subtract(uint32 a, uint32 b)
-{
- if (a < b)
- {
- CssmError::throwMe(CSSMERR_DL_DATABASE_CORRUPT);
- }
-
- return a - b;
-}
-
-
-
-inline uint32 CheckUInt32Multiply(uint32 a, uint32 b)
-{
- uint32 c = a * b;
- uint64 cc = ((uint64) a) * ((uint64) b);
- if (c != cc)
- {
- CssmError::throwMe(CSSMERR_DL_DATABASE_CORRUPT);
- }
-
- return c;
-}
-
-
-
-inline uint64 Check64BitAdd(uint64 a, uint64 b)
-{
- uint64 c = a + b;
- if (c < a)
- {
- CssmError::throwMe(CSSMERR_DL_DATABASE_CORRUPT);
- }
-
- return c;
-}
-
-
-
-inline uint64 Check64BitSubtract(uint64 a, uint64 b)
-{
- if (a < b)
- {
- CssmError::throwMe(CSSMERR_DL_DATABASE_CORRUPT);
- }
-
- return a - b;
-}
-
-
-
-inline uint64 Check64BitMultiply(uint64 a, uint64 b)
-{
- if (a != 0)
- {
- uint64 max = (uint64) -1;
- uint64 limit = max / a;
- if (b > limit)
- {
- CssmError::throwMe(CSSMERR_DL_DATABASE_CORRUPT);
- }
- }
-
- return a * b;
-}
-
-
-
-#endif