Check for division by zero and overflow / underflow.

This commit is contained in:
tim.schubert@tu-bs.de 2016-10-26 22:20:19 +02:00
parent f3799c90d0
commit 089fe12128

View file

@ -127,15 +127,24 @@ int calc(unsigned int num1, unsigned int num2, char op, unsigned int *result)
// TODO check for over/under flow // TODO check for over/under flow
switch (op) { switch (op) {
case '+': case '+':
*result = num1 + num2; if (__builtin_uadd_overflow(num1, num2, result)) {
return -1;
}
break; break;
case '-': case '-':
*result = num1 - num2; if (__builtin_usub_overflow(num1, num2, result)) {
return -1;
}
break; break;
case '*': case '*':
*result = num1 * num2; if (__builtin_umul_overflow(num1, num2, result)) {
return -1;
}
break; break;
case '/': case '/':
if (num1 == 0 || num2 == 0) {
return -1;
}
*result = num1 / num2; *result = num1 / num2;
break; break;
default: default: