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
|
||||
switch (op) {
|
||||
case '+':
|
||||
*result = num1 + num2;
|
||||
if (__builtin_uadd_overflow(num1, num2, result)) {
|
||||
return -1;
|
||||
}
|
||||
break;
|
||||
case '-':
|
||||
*result = num1 - num2;
|
||||
if (__builtin_usub_overflow(num1, num2, result)) {
|
||||
return -1;
|
||||
}
|
||||
break;
|
||||
case '*':
|
||||
*result = num1 * num2;
|
||||
if (__builtin_umul_overflow(num1, num2, result)) {
|
||||
return -1;
|
||||
}
|
||||
break;
|
||||
case '/':
|
||||
if (num1 == 0 || num2 == 0) {
|
||||
return -1;
|
||||
}
|
||||
*result = num1 / num2;
|
||||
break;
|
||||
default:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue