ucheck.c 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. /*
  2. * (c) copyright 1988 by the Vrije Universiteit, Amsterdam, The Netherlands.
  3. * See the copyright notice in the ACK home directory, in the file "Copyright".
  4. *
  5. *
  6. * Module: CARDINAL operations with overflow checking
  7. * Author: Ceriel J.H. Jacobs
  8. * Version: $Id$
  9. */
  10. #ifndef EM_WSIZE
  11. #define EM_WSIZE _EM_WSIZE
  12. #endif
  13. #ifndef EM_LSIZE
  14. #define EM_LSIZE _EM_LSIZE
  15. #endif
  16. #include <m2_traps.h>
  17. #define MAXCARD ((unsigned)-1)
  18. #if EM_WSIZE < EM_LSIZE
  19. #define MAXLONGCARD ((unsigned long) -1L)
  20. #endif
  21. adduchk(a,b)
  22. unsigned a,b;
  23. {
  24. if (MAXCARD - a < b) TRP(M2_UOVFL);
  25. }
  26. #if EM_WSIZE < EM_LSIZE
  27. addulchk(a,b)
  28. unsigned long a,b;
  29. {
  30. if (MAXLONGCARD - a < b) TRP(M2_UOVFL);
  31. }
  32. #endif
  33. muluchk(a,b)
  34. unsigned a,b;
  35. {
  36. if (a != 0 && MAXCARD/a < b) TRP(M2_UOVFL);
  37. }
  38. #if EM_WSIZE < EM_LSIZE
  39. mululchk(a,b)
  40. unsigned long a,b;
  41. {
  42. if (a != 0 && MAXLONGCARD/a < b) TRP(M2_UOVFL);
  43. }
  44. #endif
  45. subuchk(a,b)
  46. unsigned a,b;
  47. {
  48. if (b < a) TRP(M2_UUVFL);
  49. }
  50. #if EM_WSIZE < EM_LSIZE
  51. subulchk(a,b)
  52. unsigned long a,b;
  53. {
  54. if (b < a) TRP(M2_UUVFL);
  55. }
  56. #endif