diff options
author | Andrew J. Schorr <aschorr@telemetry-investments.com> | 2017-04-14 10:27:24 -0400 |
---|---|---|
committer | Andrew J. Schorr <aschorr@telemetry-investments.com> | 2017-04-14 10:27:24 -0400 |
commit | e176d2c3808ae99e805c402ffaccf1fc937e318d (patch) | |
tree | c9c5323803dc2f9c9d8d44b596e99f4bbe31c31f | |
parent | 3978dea8ddf29e8185cf61d5fba897d58439cade (diff) | |
download | egawk-e176d2c3808ae99e805c402ffaccf1fc937e318d.tar.gz egawk-e176d2c3808ae99e805c402ffaccf1fc937e318d.tar.bz2 egawk-e176d2c3808ae99e805c402ffaccf1fc937e318d.zip |
In the intdiv extension, division by zero now gives a warning and returns -1 instead of throwing a fatal error.
-rw-r--r-- | extension/ChangeLog | 5 | ||||
-rw-r--r-- | extension/intdiv.c | 16 |
2 files changed, 17 insertions, 4 deletions
diff --git a/extension/ChangeLog b/extension/ChangeLog index d8eb6187..ef668467 100644 --- a/extension/ChangeLog +++ b/extension/ChangeLog @@ -1,3 +1,8 @@ +2017-04-14 Andrew J. Schorr <aschorr@telemetry-investments.com> + + * intdiv.c (do_intdiv): On division by zero, return -1 and issue a + warning instead of throwing a fatal error. + 2017-04-13 Andrew J. Schorr <aschorr@telemetry-investments.com> * intdiv.c (do_intdiv): On a division by zero fatal error, there's diff --git a/extension/intdiv.c b/extension/intdiv.c index e3dd0eef..aa1afd18 100644 --- a/extension/intdiv.c +++ b/extension/intdiv.c @@ -129,8 +129,10 @@ do_intdiv(int nargs, awk_value_t *result, struct awk_ext_func *unused) num = double_to_int(nv.num_value); denom = double_to_int(dv.num_value); - if (denom == 0.0) - fatal(ext_id, _("intdiv: division by zero attempted")); + if (denom == 0.0) { + warning(ext_id, _("intdiv: division by zero attempted")); + return make_number(-1, result); + } quotient = double_to_int(num / denom); #ifdef HAVE_FMOD @@ -161,8 +163,14 @@ do_intdiv(int nargs, awk_value_t *result, struct awk_ext_func *unused) mpz_clear(numer); return make_number(-1, result); } - if (mpz_sgn(denom) == 0) - fatal(ext_id, _("intdiv: division by zero attempted")); + if (mpz_sgn(denom) == 0) { + warning(ext_id, _("intdiv: division by zero attempted")); + if (numer == numer_tmp) + mpz_clear(numer); + if (denom == denom_tmp) + mpz_clear(denom); + return make_number(-1, result); + } /* ask gawk to allocate return values for us */ quotient = get_mpz_ptr(); |