Check for division by zero and overflow / underflow.
This commit is contained in:
parent
f3799c90d0
commit
089fe12128
1 changed files with 12 additions and 3 deletions
15
netcalc.c
15
netcalc.c
|
@ -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:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue