/* * (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: /cvsup/minix/src/lib/ack/libm2/ucheck.c,v 1.1 2005/10/10 15:27:46 beng Exp $ */ #ifndef EM_WSIZE #define EM_WSIZE _EM_WSIZE #endif #ifndef EM_LSIZE #define EM_LSIZE _EM_LSIZE #endif #include #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_UUVFL); } #if EM_WSIZE < EM_LSIZE subulchk(a,b) unsigned long a,b; { if (b < a) TRP(M2_UUVFL); } #endif