dc: make 4 % 0 emit error messgaes and set result to 0

function                                             old     new   delta
mod                                                  105     136     +31

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2019-05-16 09:40:36 +02:00
parent abe248b208
commit 1113961dde

View File

@ -94,13 +94,18 @@ static void mod(void)
{
data_t d = pop();
//if (d == 0) {
// bb_error_msg("remainder by zero");
// pop();
// push(0);
// return;
//}
//^^^^ without this, we simply get SIGFPE and die
/* compat with dc (GNU bc 1.07.1) 1.4.1:
* $ dc -e '4 0 % p'
* dc: remainder by zero
* 0
*/
if (d == 0) {
bb_error_msg("remainder by zero");
pop();
push(0);
return;
}
/* ^^^^ without this, we simply get SIGFPE and die */
push((data_t) pop() % d);
}