66 lines
1 KiB
C
66 lines
1 KiB
C
|
/*
|
||
|
* (c) copyright 1988 by the Vrije Universiteit, Amsterdam, The Netherlands.
|
||
|
* See the copyright notice in the ACK home directory, in the file "Copyright".
|
||
|
*
|
||
|
*
|
||
|
* Module: CARDINAL operations with overflow checking
|
||
|
* Author: Ceriel J.H. Jacobs
|
||
|
* Version: $Header$
|
||
|
*/
|
||
|
|
||
|
#ifndef EM_WSIZE
|
||
|
#define EM_WSIZE _EM_WSIZE
|
||
|
#endif
|
||
|
#ifndef EM_LSIZE
|
||
|
#define EM_LSIZE _EM_LSIZE
|
||
|
#endif
|
||
|
|
||
|
#include <m2_traps.h>
|
||
|
|
||
|
#define MAXCARD ((unsigned)-1)
|
||
|
#if EM_WSIZE < EM_LSIZE
|
||
|
#define MAXLONGCARD ((unsigned long) -1L)
|
||
|
#endif
|
||
|
|
||
|
adduchk(a,b)
|
||
|
unsigned a,b;
|
||
|
{
|
||
|
if (MAXCARD - a > b) TRP(M2_UOVFL);
|
||
|
}
|
||
|
|
||
|
#if EM_WSIZE < EM_LSIZE
|
||
|
addulchk(a,b)
|
||
|
unsigned long a,b;
|
||
|
{
|
||
|
if (MAXLONGCARD - a > b) TRP(M2_UOVFL);
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
muluchk(a,b)
|
||
|
unsigned a,b;
|
||
|
{
|
||
|
if (a != 0 && MAXCARD/a < b) TRP(M2_UOVFL);
|
||
|
}
|
||
|
|
||
|
#if EM_WSIZE < EM_LSIZE
|
||
|
mululchk(a,b)
|
||
|
unsigned long a,b;
|
||
|
{
|
||
|
if (a != 0 && MAXLONGCARD/a < b) TRP(M2_UOVFL);
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
subuchk(a,b)
|
||
|
unsigned a,b;
|
||
|
{
|
||
|
if (b < a) TRP(M2_UOVFL);
|
||
|
}
|
||
|
|
||
|
#if EM_WSIZE < EM_LSIZE
|
||
|
subulchk(a,b)
|
||
|
unsigned long a,b;
|
||
|
{
|
||
|
if (b < a) TRP(M2_UOVFL);
|
||
|
}
|
||
|
#endif
|