mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-20 11:48:30 -06:00
[gnc_scm_to_numeric] create NaN gnc_numeric instead of runtime error
If guile calls a C function which expects gnc_numeric but sends a non-number, it will create a gnc_numeric_error object. This will allow error gnc_numeric to be handled elsewhere. Also the overflow gnc_numeric was incorrectly created.
This commit is contained in:
parent
8f32992100
commit
a1c517b4ba
@ -1721,11 +1721,21 @@ gnc_scm2query (SCM query_scm)
|
||||
gnc_numeric
|
||||
gnc_scm_to_numeric(SCM gncnum)
|
||||
{
|
||||
if (scm_is_signed_integer(scm_numerator(gncnum), INT64_MIN, INT64_MAX) &&
|
||||
scm_is_signed_integer(scm_denominator(gncnum), INT64_MIN, INT64_MAX))
|
||||
return gnc_numeric_create(scm_to_int64(scm_numerator(gncnum)),
|
||||
scm_to_int64(scm_denominator(gncnum)));
|
||||
return gnc_numeric_create(0, GNC_ERROR_OVERFLOW);
|
||||
SCM num, denom;
|
||||
|
||||
/* Not a number. */
|
||||
if (!scm_is_number (gncnum))
|
||||
return gnc_numeric_error (GNC_ERROR_ARG);
|
||||
|
||||
num = scm_numerator (gncnum);
|
||||
denom = scm_denominator (gncnum);
|
||||
|
||||
/* scm overflows 64-bit numbers */
|
||||
if (!scm_is_signed_integer (num, INT64_MIN, INT64_MAX) ||
|
||||
!scm_is_signed_integer (denom, INT64_MIN, INT64_MAX))
|
||||
return gnc_numeric_error (GNC_ERROR_OVERFLOW);
|
||||
|
||||
return gnc_numeric_create (scm_to_int64 (num), scm_to_int64 (denom));
|
||||
}
|
||||
|
||||
SCM
|
||||
|
Loading…
Reference in New Issue
Block a user